2013-05-17 7 views
0

У меня возникла проблема с пользовательским представлением (которое является RelativeLayout), которое я сделал для приложения Android (API 8). Я внедрил пользовательский вид, который отображает небольшие изображения на холсте. Все это работает отлично, за исключением того, что первый раз создается представление.Android customview не делает недействительными поля в onlayout или ondraw

Позиции изображений масштабируются после первого измерения. Правильные координаты даны в функциях onDraw и onLayout, но представления все еще нарисованы на немасштабированных позициях. Если вы снова включите и выключите экран, изображения будут отображаться в правильном положении. Однако я не могу заставить себя перерисовать. Ниже приведен фрагмент кода onLayout.

calculateMeasurements(); 
int x = (int) (v.getPositionX()*scaleX+offset[1]); 
int y = (int) (v.getPositionY()*scaleY+offset[0]); 

Log.w("View.onLayout", "__Creating v: (orig)(" + v.getPositionX()+","+v.getPositionY() + ")"+ 
"\n  (scaled)(" + x +","+y+")");  

RelativeLayout.LayoutParams params = 
(RelativeLayout.LayoutParams)foto_views.get(v.getIdentifier()).getLayoutParams(); 
params.setMargins(x, y, 0, 0); 
foto_views.get(v.getIdentifier()).setLayoutParams(params); 

Log.e("OpstellingView.onLayout" , " Layoutparams: (" 
+((RelativeLayout.LayoutParams)foto_views.get(v.getIdentifier()).getLayoutParams()).leftMargin + " ," 
+ ((RelativeLayout.LayoutParams)foto_views.get(v.getIdentifier()).getLayoutParams()).topMargin + " ," 
); 

foto_views.get(v.getIdentifier()).requestLayout(); 
foto_views.get(v.getIdentifier()).invalidate(); 
this.invalidate(); 

В calculateMeasurements() рассчитываются правильные весы. Я знаю, что он добирается до onLayout и onDraw (и имеет правильные координаты), потому что LogCat показывает его в журнале, но, как я уже сказал, точки зрения не нарисованы в нужном месте.

ответ

0

Я добавил AsyncTask для загрузки изображений, и теперь поля отображаются правильно. Я до сих пор не знаю, почему это работает, но это так. Я думаю, что это потому, что ProgressDialog заставляет просмотр перерисовываться.

 Смежные вопросы

  • Нет связанных вопросов^_^