2013-01-31 42 views
0

我有一個擴展視圖的類。 這個類在xml中調用來構建我的視圖。現在視圖自動調用onDraw函數加載onDraw函數。但是,我只能在點擊視圖後才能做onDraw()函數做什麼?總之,我只需要在點擊視圖後執行onDraw()內部的代碼。僅在點擊視圖後執行onDraw()內的代碼

DrawView.java:

public class DrawView extends View { 
    Paint mPaint = new Paint(); 
    Context context; 

    public DrawView(Context context, AttributeSet attrs){ 
     super(context, attrs); 
     this.context = context; 
     // setWillNotDraw(true); 

    } 

    protected void onDraw(Canvas canvas){ 
     super.onDraw(canvas); 
     mPaint.setColor(Color.MAGENTA); 
     canvas.drawRect((float) (getWidth()*0.3), (float) (getHeight()*0.3), getWidth(), getHeight(), mPaint); 

的main.xml:

<LinearLayout 
     android:orientation="vertical" 
     android:layout_height="fill_parent" 
     android:layout_width="0dip" 
     android:layout_weight="1">  
     <com.example.sliding.DrawView 
      android:id="@+id/tv_listRow_item1" 
      android:tag="tv_listRow_item1_1" 
      android:layout_height="0dip" 
      android:layout_width="fill_parent" 
      android:layout_weight="1" 
      android:gravity="center" 
      android:width="100dip" 
      android:height="30dip" 
      android:background="@drawable/textview_listrow_border"/> 
</LinearLayout> 

main.java:

((DrawView)v.findViewById(R.id.tv_listRow_item1)).setOnClickListener(listener); 
    private View.OnClickListener listener = new OnClickListener() { 

    @Override 
    public void onClick(View v) { 
    } 
} 

有什麼建議?感謝您的時間和關注。

+0

如果你想在你點擊時只繪製,那麼你不應該使用onDraw(),因爲每當你的視圖失效時都會調用onDraw(),這種情況發生的原因很多。我懷疑你的意思不僅僅是當然。如果是這樣,那麼只需在視圖上調用invalidate()。如果不是,請澄清你正在嘗試做什麼。 – Simon

+0

你好西蒙。該視圖以xml構建。但是當我點擊時,我需要在相同的視圖中進行稍後的修改。我知道onDraw()會自動執行加載的代碼。但是,如何我可以執行onDraw()內的代碼當我點擊視圖?建立一個新的功能工作是一個好的故事? –

+0

如果是WHEN,那麼只需在視圖上調用invalidate()。 myDrawView.invalidate()。而已。不需要更多的代碼。 – Simon

回答

0

嘗試重寫

public boolean onTouchEvent(MotionEvent event) { 
switch (event.getAction()) { 
case MotionEvent.ACTION_DOWN: 
// your actions here 
} 
} 

然後調用無效()函數,它會設置一個標誌,叫你的觀點的的onDraw()。

相關問題