2012-09-03 26 views
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方法似乎沒有觸發,如何解決它?

+0

很奇怪的是,它引發了我的Android墊,但不是在模擬器上。 – Freewind

回答

1

您必須設置drawables的邊界。

事情是這樣的:

drawable.setBounds(10,10,100,100); 
this.drawables.add(drawable); 
相關問題