CustomView的“onDraw()” - 方法永远不会被调用

时间:2015-06-24 09:28:29

标签: android layout view rendering

这是一个棘手的问题:

我正在编写自定义ImageView

public class CustomImageView extends View

要显示的图片是通过setImagePath(String path)设置的,BitMapassets文件夹中加载CustomImageView。这工作得很好,图像尺寸得到验证。

在以后的进度中,LinearLayout - 对象通过addView(View v)添加到@Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) (与父级匹配)。重写方法

onDraw(Canvas c)

被调用并计算一些疯狂的值,此时没什么重要的。

奇怪的是底值总是!而且我认为这就是为什么E/CIView﹕ onLayout - changed: true, left: 0, top: 0, right: 1080, bottom: 0 E/CIView﹕ bitmap - bitmapWidth: 735, bitmapHeight: 490 E/CIView﹕ onLayout - changed: false, left: 0, top: 0, right: 1080, bottom: 0 E/CIView﹕ bitmap - bitmapWidth: 735, bitmapHeight: 490 永远不会被调用的原因。

onLayout

有人可以向我解释为什么invalidate()永远不会得到正确的底值吗?像requestLayout()public class MainActivity extends Activity { ListView lv; String name[]={"Ankit","Arora","Arun","yadav"}; CustomAdapter obj; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv=(ListView)findViewById(R.id.listView1); obj=new CustomAdapter(MainActivity.this,name,no); lv.setAdapter(obj); obj.notifyDataSetChanged(); } } 这样的方法没有改变任何东西,也许我错过了一些特殊的部分..?

1 个答案:

答案 0 :(得分:1)

如果覆盖View,则需要提供其大小 - 这就是为什么你得到零高度范围的原因。因此,请在onMeasure()内部实施setMeasuredDimension()

E.g。

@Override protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
setMeasuredDimension(bitmapWidth, bitmapHeight); }

虽然您应该使用

检查是否有足够的空间

MeasureSpec.getSize(widthMeasureSpec)

MeasureSpec.getSize(heightMeasureSpec)