Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当触摸对象时,如何在画布内移动对象?_Android - Fatal编程技术网

Android 当触摸对象时,如何在画布内移动对象?

Android 当触摸对象时,如何在画布内移动对象?,android,Android,我是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; /***************************************

我是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;
 }

}
公共类GameviewLuzon1扩展了ImageView{
int y=0;
int x=0;
int obj1=R.drawable.obj_androidball;
int obj2=R.drawable.obj_滚筒;
/****************************************/
Drawable dr1=getResources().getDrawable(obj1);
位图bitmap1=((BitmapDrawable)dr1.getBitmap();
Drawable d1=新的BitmapDrawable(getResources(),Bitmap.createScaledBitmap(bitmap1,20,20,true));
浮动d1_startX=(浮动)0.00;
浮动d1_起点=(浮动)0.00;
浮动d1_movementX=2;
浮动d1_movementY=2;
Drawable dr2=getResources().getDrawable(obj2);
位图bitmap2=((BitmapDrawable)dr2.getBitmap();
Drawable d2=新的BitmapDrawable(getResources(),Bitmap.createScaledBitmap(bitmap2,35,35,true));
浮点数d2_startX=(浮点数)0.00;
浮动d2_起点=(浮动)0.00;
/****************************************/
公共游戏视图1(上下文、属性集属性){
超级(上下文,attrs);
}
受保护的void onDraw(画布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);
/****************************************/
}
@凌驾
公共布尔onTouchEvent(运动事件){
float touchX=event.getX();
float touchY=event.getY();
如果(touchX>=d1\u startX&&touchX=d1\u startY&&touchY=d2\u startX&&touchX=d2\u startY&&touchY
公共类游戏1动画扩展ImageView{
int y=0;
int x=0;
int zoomcontroller=0;
/*****************试验*******************/
私有上下文;
私有处理器h;
专用最终整数帧_率=30;
私有int xVelocity=10;
布尔animateObj=false;
布尔setVisibleObj=true;
/*****************试验*******************/
/*创建变量obj1等,以便
*我们可以创建一个动态对象。。,
*如果我们需要它是动态的。
* */
int obj1=R.drawable.obj_androidball;
int obj2=R.drawable.obj_滚筒;
/****************************************/
/*将一些obj值分配到它们各自的位置和位置
*将其大小设置为适合我们的屏幕大小
* */
Drawable dr1=getResources().getDrawable(obj1);
位图bitmap1=((BitmapDrawable)dr1.getBitmap();
Drawable d1=新的BitmapDrawable(getResources(),Bitmap.createScaledBitmap(bitmap1,20,20,true));
浮点d1max_width=d1.getIntrinsicWidth()*2;
浮点d1max_height=d1.getIntrinsicHeight()*2;
float d1_startX=(float)0.00;//初始化第一个对象的位置值
float d1_startY=(float)0.00;//初始化第一个对象的位置值
/****************************************/
公共游戏1模糊化(上下文、属性集属性){
超级(上下文,attrs);
mContext=上下文;
h=新处理程序();
}
private Runnable r=new Runnable(){
@凌驾
公开募捐{
使无效();
}
};
受保护的void onDraw(画布c){
/*从数据库中输入每个对象的位置值;
* */
如果(animateObj==false){
d1_startX=(浮动)(c.getWidth()/2);
d1_startY=(浮动)(c.getHeight()/2);
}
否则{
如果(d1_startX<0){
animateObj=false;
setVisibleObj=false;
} 
否则{
d1_startX-=xVelocity;
如果(d1_startX>c.getWidth()){
xVelocity=xVelocity*-1;
}
}
}
if(setVisibleObj==true){
c、 drawBitmap(((BitmapDrawable)d1).getBitmap(),d1_startX,d1_startY,null);
h、 后延迟(r,帧速率);
}
/*Log.w(“d1max_width”,Float.toString(d1max_width));
Log.w(“d1max_高度”,Float.toString(d1max_高度));
Log.w(“d1_startX”,Float.toString(d1_startX));
Log.w(“d1_startY”,Float.toString(d1_startY))*/
/****************************************/      
}
@凌驾
公共布尔onTouchEvent(运动事件){
float touchX=event.getX();
float touchY=event.getY();

如果(touchX>=d1_startX&&touchX=d1_startY&&touchY hi admin..,谢谢,但您现在可以关闭此问题..,我在几个小时后回答了..,这是我的代码。。,
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;
     }

}