为啥这个 `onDraw` 没有被触发?
Posted
技术标签:
【中文标题】为啥这个 `onDraw` 没有被触发?【英文标题】:Why this `onDraw` doesn't be triggered?为什么这个 `onDraw` 没有被触发? 【发布时间】:2012-09-03 03:07:19 【问题描述】:我有一个扩展 View
的自定义视图:
public class MyView extends View
public List<Drawable> drawables = new ArrayList<Drawable>();
public MyView(Context context)
super(context);
public MyView(Context context, AttributeSet attrs)
super(context, attrs);
public void addDrawable(Drawable drawable)
this.drawables.add(drawable);
Log.i("myview", "new drawable added: " + drawables.size());
invalidate();
@Override
protected void onDraw(Canvas canvas)
super.onDraw(canvas);
Log.i("myview", "on draw, my drawables: " + drawables.size());
for (Drawable d : drawables)
d.draw(canvas);
Log.i("myview", "Draw drawable: " + d);
我在 main.xml 中声明了它:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_
android:layout_>
<Button android:id="@+id/btnAdd"
android:layout_ android:layout_ android:text="add"/>
<com.example.MyView android:id="@+id/imageView"
android:layout_
android:layout_
android:background="#6699cc">
</com.example.MyView>
</LinearLayout>
在我的活动中,当点击按钮Add
时,一个drawable 将添加到MyView
:
public class MyActivity extends Activity
private Button btnAdd;
private MyView myView;
/**
* Called when the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
findViews();
setListeners();
private void setListeners()
this.btnAdd.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
myView.addDrawable(getResources().getDrawable(R.drawable.m1));
);
this.myView.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
);
private void findViews()
this.myView = (MyView) findViewById(R.id.imageView);
this.btnAdd = (Button) findViewById(R.id.btnAdd);
但它不起作用。当我点击“添加”按钮时,控制台打印:
09-02 17:07:27.015: INFO/myview(1748): new drawable added: 1
并且屏幕没有显示图像。 onDraw
方法好像没有触发,如何解决?
【问题讨论】:
奇怪的是它是在我的android pad上触发的,而不是在模拟器上触发的。 【参考方案1】:您必须为drawables
设置边界。
类似这样的:
drawable.setBounds(10,10,100,100);
this.drawables.add(drawable);
【讨论】:
以上是关于为啥这个 `onDraw` 没有被触发?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 cellForRowAtIndexPath 没有被触发,但其他方法被触发了?