Android 台灣中文網

標題: 想問一下關於ontouchevent事件的程式碼 [打印本頁]

作者: qqfish450901    時間: 2012-3-12 23:05
標題: 想問一下關於ontouchevent事件的程式碼
以下是我參考網路上的文章寫出來的觸碰移動物件的程式碼

public class MoveTest1Activity extends Activity {
private MyCanvasDraw cDraw;
private LinearLayout layout;
private TextView tv;
private int x=200;
private int y=200;
Rect rect = new Rect();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        cDraw=new MyCanvasDraw(this);
        layout=(LinearLayout)findViewById(R.id.tableLayout1);
        tv=(TextView)findViewById(R.id.textView1);
        layout.addView(cDraw);
      
        
                                
    }
   
  @Override
  public boolean onTouchEvent(MotionEvent event) {
    int X=(int)event.getX();
    int Y=(int)event.getY();
    float dx;
        float dy;
    switch(event.getAction())
    {
      case MotionEvent.ACTION_DOWN:
        tv.setText(X+":"+Y);
        if(this.x==event.getX()&& this.y==event.getY())
        {
                this.x=X;
                this.y=Y;
                cDraw.invalidate();
                break;
        }
      case MotionEvent.ACTION_MOVE:
        tv.setText(X+":"+Y);
        dx=event.getX()-this.x;
        dy=event.getY()-this.y;
        this.x+=dx;
        this.y+=dy;
        cDraw.invalidate();
        break;
      case MotionEvent.ACTION_UP:
        tv.setText(X+":"+Y);

        break;
    }
        
    return super.onTouchEvent(event);
   
  }
  public class MyCanvasDraw extends View
  {
   
    public MyCanvasDraw(Context context) {
      super(context);
      
    }

    @Override
    protected void onDraw(Canvas canvas) {
      super.onDraw(canvas);
      Paint mPaint=new Paint();
      mPaint.setAntiAlias(true);
      mPaint.setColor(Color.RED);
      
      canvas.drawCircle(x, y, 50, mPaint);
         
    }
  }
}

但是執行後圖片按我點下去的xy軸座標有點誤差(就滑鼠可能點在(20,20)但圖片在(40,40)處)
還有我現在是點螢幕上的任何地方,圖片都會跟著移過去
該怎麼設定說要我點再圖騙上的時候 圖片才會跟著點擊的地方移動?
麻煩各位前輩了!
作者: george310909    時間: 2012-3-14 09:48
canvas畫矩形或點陣圖的話
都以左上角為基準點
另外照你的程式碼來看
你沒有把點擊位置改成中心位置
至於怎麼改...
你可以試著把x和y再減掉r/2

作者: qqfish450901    時間: 2012-3-16 01:41
george310909 發表於 2012-3-14 09:48
canvas畫矩形或點陣圖的話
都以左上角為基準點
另外照你的程式碼來看

大概了解了!
另外請問一下
如果是使用IMAGEVIEW的話
程式寫法也是這樣寫就行了嗎?
謝謝解答!

作者: george310909    時間: 2012-3-16 10:31
是阿
只不過要喬位置  我比較喜歡用畫布
作者: qqfish450901    時間: 2012-3-16 22:57
george310909 發表於 2012-3-16 10:31
是阿
只不過要喬位置  我比較喜歡用畫布

OK了解了 謝謝你哦!





歡迎光臨 Android 台灣中文網 (https://apk.tw/) Powered by Discuz! X3.1