2011-01-21 89 views
0

我正試圖在onTouch事件的畫布上重新繪製圖像。我可以在畫布上繪製圖像,但我希望圖像在特定的x,y處重繪。在觸摸事件上重繪畫布上的圖像?

protected void onDraw(Canvas canvas) 

{ 

    mBitmap1 = BitmapFactory.decodeResource(getResources(), R.drawable.ab); 
mBitmap2 = BitmapFactory.decodeResource(getResources(), R.drawable.ab); 
this.canvas=canvas; 

    Paint p = new Paint(); 
    p.setColor(Color.parseColor("#FFFFFF")); 

    canvas.drawLine(x1, y1, x2 , y2, p); 
    canvas.drawBitmap(mBitmap1, 70, 60, null); 
    canvas.drawBitmap(mBitmap1, 185, 60, null); 
} 


    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     final int x=(int)event.getX(); 
     Log.i("***********xPos","="+x); 
     final int y=(int)event.getY(); 
     Log.i("***********yPos","="+y); 

     if(event.getAction()==MotionEvent.ACTION_UP) 
     { 

     } 
     if(event.getAction()==MotionEvent.ACTION_DOWN) 
     { 
      canvas.drawBitmap(mBitmap1,50+x,60,null); 
      this.postInvalidate(); 

     } 
     if(event.getAction()==MotionEvent.ACTION_MOVE) 
     { 

     } 
     return false; 
    } 

回答

3

好吧我想我得到了什麼,你的問題是你每次調用postinvalidate()方法時,action.down調用它最終調用ondraw()。它會重繪它在位圖上的parilular設置值你再次提取


所以你看起來它保持不變。


確定遵循這個步驟:


1:使用一些公共變量用於繪製的OnDraw方法位圖的x和y軸,讓說INITX和inity這


2 :比觸摸事件:通過將您的x和y值添加到initx和inity resp來更新此值。


like:initx = initx + x; inity = inity + y; 最後在陽離子下行事件中調用post.invalidate或ondraw方法。它會爲你工作

0

請參閱MotionEvent類,該類提供用戶觸摸屏幕的位置的座標。