1
我有被延長View
自定義視圖:爲什麼這個`onDraw`不會被觸發?
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_width="fill_parent"
android:layout_height="fill_parent">
<Button android:id="@+id/btnAdd"
android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="add"/>
<com.example.MyView android:id="@+id/imageView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#6699cc">
</com.example.MyView>
</LinearLayout>
而且在我的活動,按鈕Add
被點擊時,可拉伸性會增加到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墊,但不是在模擬器上。 – Freewind