Android 单击“暂停”按钮时如何暂停球?

Android 单击“暂停”按钮时如何暂停球?,android,android-animation,Android,Android Animation,我有球图像,当我点击图像时,它在屏幕上向所有方向移动,我的要求是每当我点击暂停按钮时,我都要暂停球,如下图所示,我应该在哪里对ImageButton Activity_main.xml给出如下图像 主要活动: public class MainActivity extends Activity { static TextView editText; static int score=0; @Override protected void onCreate(Bundle savedInstan

我有球图像,当我点击图像时,它在屏幕上向所有方向移动,我的要求是每当我点击暂停按钮时,我都要暂停球,如下图所示,我应该在哪里对
ImageButton

Activity_main.xml给出如下图像

主要活动:

public class MainActivity extends Activity {

static TextView editText;
static int score=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);     
     editText=(TextView) findViewById(R.id.editText1);
     //editText.setText(""+score);
     Button button=(Button) findViewById(R.id.button1);
     button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            new AnimatedView(MainActivity.this).pauseClicked();
        }
    });
}
public static void setCount(int count) {

    //new MainActivity().onCreate(null);
    score=count;
    editText.setText(""+score);
}
Animatedview.java

public class AnimatedView extends ImageView{

String name;
static int count=0;
private Context mContext;
int x = 130;
int y = 450;
private float a,b;
private int xVelocity = 20;
private int yVelocity = 20;
private Handler h;
private final int FRAME_RATE = 25;
BitmapDrawable ball;
boolean touching;
boolean dm_touched = false;
float move=3;
int bm_x = 0, bm_y = 0, bm_offsetx, bm_offsety,bm_w,bm_h;
boolean paused;
private Paint line, ball1, background;
static int click=0;
private static final int TEXT_ID = 0;
DBCeation dbCeation;
public AnimatedView(Context context) {
    super(context);
}
public AnimatedView(Context context, AttributeSet attrs)  {  
    super(context, attrs);  
    mContext = context; 
    h = new Handler();
} 

private Runnable r = new Runnable() {
    @Override
    public void run() {
        //Log.e("game","run called");
        if(touching = true)
        invalidate(); 
    }
};


@Override
protected void onDraw(Canvas c) {  
    BitmapDrawable ball = (BitmapDrawable) mContext.getResources().getDrawable(R.drawable.ball);  
    if (x<0 && y <0) {
        //x = this.getWidth()/2;
        y = c.getHeight()/2;


    } else {
        //Log.d("s",""+xVelocity);
        Log.d("s",""+yVelocity);
        x += xVelocity;
        y += yVelocity;
        if ((x > this.getWidth() - ball.getBitmap().getWidth()) || (x < 0)) {
            xVelocity = xVelocity*-1;
        }
        if (y >( this.getHeight() - ball.getBitmap().getHeight()) ||y <0) {
            yVelocity = yVelocity*-1;
        }
    }
    c.drawBitmap(ball.getBitmap(), x, y, null);  
   //Log.e("sarat",""+touching);

  if(click>=2){
  if(bm_h+y>630){

       final EditText input=new EditText(mContext);
      Toast.makeText(getContext(),"game over",Toast.LENGTH_SHORT).show(); 
      AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
      builder.setTitle("Game Is Over");
        builder.setMessage("Enter your Name");
         // Use an EditText view to get user input.
         input.setId(TEXT_ID);
         builder.setView(input);
         builder.setPositiveButton("save", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                // TODO Auto-generated method stub

                name=input.getText().toString();
                Log.d("name",""+name);
                int score=MainActivity.score;
                dbCeation=new DBCeation(mContext);
                dbCeation.insertValues(name, score);
                Intent intent=new Intent(mContext,Home.class);
                click=0;
                mContext.startActivity(intent);
            }
        });
      builder.setIcon(R.drawable.ic_launcher);


      builder.show();
      x=150;
      y=200;
      xVelocity=0;
      yVelocity=0;

  }}
    if(touching){
         // Log.e("game","iftouch called called");
        h.postDelayed(r, FRAME_RATE);    
        bm_w=ball.getBitmap().getWidth();
        bm_h=ball.getBitmap().getHeight();
      }
  }
public void pauseClicked()
{   
    xVelocity=0;
    yVelocity=0;
    invalidate(xVelocity, yVelocity, 0, 0);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
    // Log.d("game","ontouch called");
    int touchType = event.getAction();

     switch(touchType){
        case MotionEvent.ACTION_MOVE: 
            a = event.getX();
            b = event.getY();
            touching = true;

           /* if (dm_touched) {
                x = (int) a - bm_offsetx;
                y = (int) b - bm_offsety;
            }*/
            //invalidate();
            break;

         case MotionEvent.ACTION_DOWN: 
             //x and y give you your touch coordinates
              a = event.getX();
              b = event.getY();
              touching = true;
              if(a>x+20&&a<330&&b<=y+320&&b>y){
                     click++;
                     Log.d("click",""+click);
                 invalidate();
                 touching=true;}
             /* if (touching) {
                    // paused = true;
                    h.removeCallbacks(r);
                    touching = false;
                } else {
                    touching = true;
                }*/
              //Log.d("game","action_down called");
              Log.e("s",""+ a);
              Log.e("s",""+ b);
              Log.e("s",""+ x);
              Log.e("s",""+ y);
              Log.e("s",""+ bm_w);
              Log.e("s",""+ bm_h);
              if ((a > x) && (a < bm_w + x) && (b > y) && (b < bm_h + y)) { 
                  count++;
                MainActivity.setCount(count);
                  //invalidate();
                  Log.i("score",""+count);

                }
              if (dm_touched) {
                  if ((a > x) && (a < bm_w + x) && (b > y) && (b < bm_h + y)) { 
                  move+=2;
                    //x = (int) a - bm_offsetx;
                  y = (int) (yVelocity*-1);

                  //invalidate();

                }}
               // dm_touched = true;
         case MotionEvent.ACTION_UP:
             a = event.getX();
              b = event.getY();
            /* if(a>x+20&&a<330&&b<=y+320&&b>y){
                 click++;
                 Log.d("click",""+click);
             invalidate();
             touching=true;}*/
             if ((a > x) && (a < bm_w + x) && (b > y) && (b < bm_h + y)) { 
                Log.e("game","clicked");
            }

            default:

                dm_touched = true;
            }

            return true;
}

@Override
public void destroyDrawingCache() {

    count=0;
    click=0;
    super.destroyDrawingCache();
}
public类AnimatedView扩展了ImageView{
字符串名;
静态整数计数=0;
私有上下文;
int x=130;
int y=450;
私人浮动a、b;
私有int xVelocity=20;
私人国际城市=20;
私有处理器h;
专用最终整数帧_率=25;
可牵引球;
布尔接触;
布尔值dm_=false;
浮动移动=3;
int bm_x=0,bm_y=0,bm_offsetx,bm_offsety,bm_w,bm_h;
布尔暂停;
私人绘制线,ball1,背景;
静态int click=0;
私有静态最终整型文本\u ID=0;
DBCeation DBCeation;
公共动画视图(上下文){
超级(上下文);
}
公共动画视图(上下文,属性集属性){
超级(上下文,attrs);
mContext=上下文;
h=新处理程序();
} 
private Runnable r=new Runnable(){
@凌驾
公开募捐{
//Log.e(“游戏”、“跑步”);
如果(触摸=真)
使无效();
}
};
@凌驾
受保护的空白onDraw(画布c){
BitmapDrawable ball=(BitmapDrawable)mContext.getResources().getDrawable(R.drawable.ball);
如果(x(this.getHeight()-ball.getBitmap().getHeight())| | y=2){
如果(bm_h+y>630){
最终编辑文本输入=新编辑文本(mContext);
Toast.makeText(getContext(),“游戏结束”,Toast.LENGTH_SHORT.show();
AlertDialog.Builder=新建AlertDialog.Builder(mContext);
builder.setTitle(“游戏结束”);
builder.setMessage(“输入您的姓名”);
//使用EditText视图获取用户输入。
输入.setId(文本\u ID);
builder.setView(输入);
setPositiveButton(“保存”,新的DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
//TODO自动生成的方法存根
name=input.getText().toString();
Log.d(“名称”,“名称+名称”);
int score=MainActivity.score;
dbCeation=新dbCeation(mContext);
dbCeation.insertValues(名称、分数);
意图=新意图(mContext,Home.class);
单击=0;
mContext.startActivity(意图);
}
});
builder.setIcon(R.drawable.ic_启动器);
builder.show();
x=150;
y=200;
xVelocity=0;
yVelocity=0;
}}
如果(触摸){
//Log.e(“游戏”,“如果触摸被调用”);
h、 后延迟(r,帧速率);
bm_w=ball.getBitmap().getWidth();
bm_h=ball.getBitmap().getHeight();
}
}
公共许可证已取消()
{   
xVelocity=0;
yVelocity=0;
失效(xVelocity,yVelocity,0,0);
}
@凌驾
公共布尔onTouchEvent(运动事件){
//Log.d(“游戏”,“被称为ontouch”);
int touchType=event.getAction();
开关(触摸式){
case MotionEvent.ACTION\u移动:
a=event.getX();
b=event.getY();
触摸=真实;
/*如果(dm_触摸){
x=(int)a-bm_offsetx;
y=(int)b-bm_offsety;
}*/
//使无效();
打破
case MotionEvent.ACTION\u DOWN:
//x和y为您提供触摸坐标
a=event.getX();
b=event.getY();
触摸=真实;
如果(a>x+20&&ax)和(ay)和(bx)和&(ay)和&(bx+20&&ax)和(ay)和(b
对不起,我不知道问题出在哪里,您在哪里处理暂停按钮单击?这就是问题所在,在这种情况下,我不知道我需要在哪里处理暂停单击。如上图所示,总控球代码位于animatedview中。java,我正在activity_main.xml中添加iamgebutton,我如何给出一个想法或其他解决方案o暂停球你应该看看SurfaceView。像ImageView这样的普通android视图不是为实时图形设计的。看看SurfaceView…如果你仍然想按自己的方式进行,可以这样做:if(!paused)h.postDelayed(r,帧速率);但是如何提供指向此if条件的链接pausebutton暂停按钮的代码在哪里?