2014-02-18 3 views
0

Я хочу нарисовать круг на экране, который будет перемещаться при удержании пальца. В коде есть метод, который изменяет цвет экрана в этом случае, но как я могу изменить положение круга? помогите помочь!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); 

Также ваши getX и getY Funcitons бесполезны

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

вместо создания переменной х в DrawView и 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) бесполезны, так как вы возвращаете то же значение, которое вы передаете методу. Вероятно, вам нужно вызвать пару View.getX() и View.getY(), которые являются View.setX(float x) и View.setY(float y), в методе onTouch. Кроме того, те были введены в уровне Api 11.