2014-02-18 40 views
0

我想在屏幕上绘制一个圆圈,当它拿着手指时它会移动。在代码中有一种方法可以在此事件中更改屏幕的颜色,但是如何更改圆的位置? poaluysta帮助!onTouch + canvas + android

package com.example.canva; 

import android.app.Activity; 
import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.os.Bundle; 
import android.view.MotionEvent; 
import android.view.View; 

public class MyActivity extends Activity implements View.OnTouchListener { 
    /** 
    * Called when the activity is first created. 
    */ 
    private float x; 
    private float y; 
    private String sDown; 
    private String sMove; 
    private String sUp; 
    private DrawView dr; 
    private Paint p; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     dr = new DrawView(this); 
     dr.setOnTouchListener(this); 

     setContentView(dr); 
    } 

    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) { 
     x = motionEvent.getX(); 
     y = motionEvent.getY(); 

     switch (motionEvent.getAction()) { 
      case MotionEvent.ACTION_DOWN: // нажатие 
       sDown = "Down: " + x + "," + y; 
       sMove = ""; sUp = ""; 
       break; 
      case MotionEvent.ACTION_MOVE: // движение 
       sMove = "Move: " + x + "," + y; 
       dr.changeColor((int)-x); 
       dr.getX(x); 
       dr.getY(y); 
       break; 
      case MotionEvent.ACTION_UP: // отпускание 
      case MotionEvent.ACTION_CANCEL: 
       sMove = ""; 
       sUp = "Up: " + x + "," + y; 
       break; 
     } 
     return true; 
    } 
    } 

    class DrawView extends View { 
     private Paint p; 

     public DrawView(Context context) { 
      super(context); 
      p = new Paint(); 
      p.setColor(Color.RED); 
     } 

     @Override 
     protected void onDraw(Canvas canvas) { 
      canvas.drawCircle(getX(),getY(),50,p); 
      invalidate(); 
     } 

     public float getX(float X){ 
      return X; 
     } 
     public float getY(float Y){ 
      return Y; 
     } 

     public void changeColor(int color){ 
      this.setBackgroundColor(color); 
     } 

} 

回答

2
class DrawView extends View { 
     private Paint p; 
     int x=getX(),y=getY(); 
     public void refresh(int x,int y){ 
      this.x=x; 
      this.y=y; 
      invaliate(); 
     } 


     @Override 
     protected void onDraw(Canvas canvas) { 
      canvas.drawCircle(x,y,50,p); 
     } 
    } 

和onTouch呼叫介绍

dr.refresh(x,y); 

而且你getXgetY funcitons没用

public float getX(float X){ 
     return X; 
    } 

,而不是创造drawView函数变量x和setX

public void setX(float X){ 
     this.X=X; 
    } 
+0

int x = getX(),y = getY(); public void refresh(float x,float y){ this.x = x; this.y = y; invaliate(); } – user2954895

0

View.getX()View.getY()是在API级别11介绍您应该知道这一点。您的DrawView.getX(float X)和DrawView.getY(float Y)是无用的,因为您正在返回传递给该方法的相同值。您可能需要在onTouch方法中调用View.getX()View.getY()View.setX(float x)View.setY(float y)。还有那些是在API级别11