我遇到了我为Android应用程序(API 8)制作的自定义视图(这是一个RelativeLayout)的问题。 我已经实现了一个在画布上显示小图像的自定义视图。这一切都很好,除了第一次绘制视图。
在第一次测量后缩放图像的位置。 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 :(得分:0)
我添加了一个AsyncTask来加载图像,现在边距正确显示。我仍然不知道为什么会这样,但确实如此。我认为这是因为ProgressDialog
迫使视图重绘自己。