2014-01-05 7 views
1

Я новичок в Android, и у меня проблемы с перемещением объекта внутри onDraw(Canvas c). Ниже мой код. Надеюсь, кто-то скажет мне, как это исправить.Как перемещать объект внутри холста при касании объекта?

public class GameviewLuzon1 extends ImageView { 

int y = 0; 
int x = 0; 

int obj1 = R.drawable.obj_androidball; 
int obj2 = R.drawable.obj_drum; 
/****************************************/ 

Drawable dr1 = getResources().getDrawable(obj1); 
Bitmap bitmap1 = ((BitmapDrawable) dr1).getBitmap(); 
Drawable d1 = new BitmapDrawable(getResources(), Bitmap.createScaledBitmap(bitmap1, 20, 20, true)); 
float d1_startX = (float) 0.00; 
float d1_startY = (float) 0.00; 
float d1_movementX = 2; 
float d1_movementY = 2; 

Drawable dr2 = getResources().getDrawable(obj2); 
Bitmap bitmap2 = ((BitmapDrawable) dr2).getBitmap(); 
Drawable d2 = new BitmapDrawable(getResources(), Bitmap.createScaledBitmap(bitmap2, 35, 35, true)); 
float d2_startX = (float) 0.00; 
float d2_startY = (float) 0.00; 
/****************************************/ 

public GameviewLuzon1(Context context, AttributeSet attrs) { 
     super(context, attrs); 
} 
protected void onDraw(Canvas c) { 

    d1_startX = (float) (this.getWidth()/d1_movementX); 
    d1_startY = (float) (this.getHeight()/d1_movementY); 
    d2_startX = (float) (this.getWidth()/5.75); 
    d2_startY = (float) (this.getHeight()/7.99); 
    /****************************************/ 

    c.drawBitmap(((BitmapDrawable) d1).getBitmap(), d1_startX, d1_startY, null); 
    c.drawBitmap(((BitmapDrawable) d2).getBitmap(), d2_startX, d2_startY, null); 
    /****************************************/ 



} 

@Override 
public boolean onTouchEvent(MotionEvent event) { 

    float touchX = event.getX(); 
    float touchY = event.getY(); 

    if(touchX >= d1_startX && touchX <= (d1_startX + d1.getIntrinsicWidth()) 
     && touchY >= d1_startY && touchY <= (d1_startY +d1.getIntrinsicHeight())) { 
     Log.w("d1 success","you touched object"); 

     d1_movementX = 0; 
     d1_movementY = 0; 
    } 
    else if(touchX >= d2_startX && touchX <= (d2_startX + d2.getIntrinsicWidth()) 
      && touchY >= d2_startY && touchY <= (d2_startY +d2.getIntrinsicHeight())) { 
      Log.w("d2 success","you touched object"); 
      invalidate(); 
    } 
    else { 
     Log.w("epic","wala jud ka kaigu"); 
    } 

    /*Commented out for debugging purpose only*/ 
    /*Log.w("touch",Float.toString(touchX)); 
    Log.w("start of Image",Float.toString(d1_startX)); 
    Log.w("edge of image",Float.toString(d1_startX + d1.getIntrinsicWidth()));*/ 

    return true; 
} 

} 
+0

привет админ .., спасибо, но вы можете закрыть этот вопрос сейчас .., я ответил через несколько часов .., и вот мой код сейчас .., –

ответ

2
public class Game1LuzonAnimation extends ImageView { 

    int y = 0; 
    int x = 0; 
    int zoomControler = 0; 

    /*****************TEST*******************/ 
    private Context mContext; 
    private Handler h; 
    private final int FRAME_RATE = 30; 

    private int xVelocity = 10; 
    boolean animateObj = false; 
    boolean setVisibleObj = true; 
    /*****************TEST*******************/ 
    /*Create variable obj1 and so on, so that 
     * we can create a dynamic objects.., 
     * if we need it to be dynamic. 
     * */ 
    int obj1 = R.drawable.obj_androidball; 
    int obj2 = R.drawable.obj_drum; 
    /****************************************/ 

    /* Assign some obj values into their respective places and 
     * set their sizes to fit in our screen sizes 
     * */ 
    Drawable dr1 = getResources().getDrawable(obj1); 
    Bitmap bitmap1 = ((BitmapDrawable) dr1).getBitmap(); 
    Drawable d1 = new BitmapDrawable(getResources(), Bitmap.createScaledBitmap(bitmap1, 20, 20, true)); 
    float d1max_width = d1.getIntrinsicWidth() * 2; 
    float d1max_height = d1.getIntrinsicHeight() * 2; 
    float d1_startX = (float) 0.00; //initialize the position value of first object 
    float d1_startY = (float) 0.00; //initialize the position value of first object 

    /****************************************/ 

    public Game1LuzonAnimation(Context context, AttributeSet attrs) { 

      super(context, attrs); 
      mContext = context; 
      h = new Handler(); 
    } 

    private Runnable r = new Runnable() { 
     @Override 
     public void run() { 
       invalidate(); 
     } 
    }; 

    protected void onDraw(Canvas c) { 

     /* put the values for position of each object from database; 
      * */ 
     if(animateObj == false){ 
      d1_startX = (float) (c.getWidth()/2); 
      d1_startY = (float) (c.getHeight()/2); 
     } 
     else { 
      if (d1_startX < 0) { 
       animateObj = false; 
       setVisibleObj = false; 

      } 
      else { 
       d1_startX -= xVelocity; 
       if(d1_startX > c.getWidth()){ 
        xVelocity = xVelocity*-1; 
       } 
      } 
     } 

     if(setVisibleObj == true) { 
      c.drawBitmap(((BitmapDrawable) d1).getBitmap(), d1_startX, d1_startY, null); 
      h.postDelayed(r, FRAME_RATE); 
     } 


     /*Log.w("d1max_width", Float.toString(d1max_width)); 
     Log.w("d1max_height", Float.toString(d1max_height)); 
     Log.w("d1_startX", Float.toString(d1_startX)); 
     Log.w("d1_startY", Float.toString(d1_startY));*/ 
     /****************************************/  
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 

     float touchX = event.getX(); 
     float touchY = event.getY(); 

     if(touchX >= d1_startX && touchX <= (d1_startX + d1.getIntrinsicWidth()) 
      && touchY >= d1_startY && touchY <= (d1_startY +d1.getIntrinsicHeight())) { 
      Log.w("d1 success","you touched object"); 

      if(d1.getIntrinsicWidth() < d1max_width && d1.getIntrinsicHeight() < d1max_height) { 
       d1 = new BitmapDrawable(getResources(), Bitmap.createScaledBitmap(bitmap1, d1.getIntrinsicWidth()*2, d1.getIntrinsicHeight()*2, true)); 
       animateObj = true; 
      } 

     } 
     else { 
      Log.w("epic","wala jud ka kaigu"); 
     } 

     return true; 
    } 

} 
Смежные вопросы