首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Android中移动形状

在Android中移动形状
EN

Stack Overflow用户
提问于 2013-03-19 13:52:36
回答 1查看 2.3K关注 0票数 1

我试图找出最好的方法来简单地从android的屏幕顶部向下移动一个矩形,因为我试图制作一个俄罗斯方块的克隆,但我不明白为什么android不喜欢计时器。所以,如果你们能帮我找出把这个矩形从上到下移动的最好方法,那就太棒了。

在这段代码中,我创建了一个显示矩形的游戏屏幕,但当我尝试用计时器移动它时,它不起作用

package 
com.example.coloroblind;

import java.util.Timer;

import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.net.wifi.p2p.WifiP2pManager.ActionListener;
import android.os.Bundle;
import android.view.View;

public class GameView extends Activity {

    int x=20,y=20,changeX=2,changeY=2;
     boolean reverseX=false,reverseY=false;

     @Override public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.game);
        setContentView(new DrawView(this));
    }

    public class DrawView extends View{

        public DrawView(Context context){
            super(context);


        }
         Timer timer = new Timer(10,new TimerListener());
         timer.start();


    @Override public void onDraw(Canvas canvas){
        super.onDraw(canvas);

        //fill the screen with white
        Paint paint = new Paint();
        paint.setAntiAlias(true);
        canvas.drawColor(Color.WHITE);

        //draw a rect
        paint.setColor(Color.GREEN);

        RectF rect = new RectF(x,y,50,50);

        canvas.drawRoundRect(rect, 6, 6, paint);

        int start = ((int)Math.random())*4;



       x+=changeX;
       y+=changeY;
       if(y>getHeight()){
       changeY=-1*changeY;
       reverseY=true;
       }
       if((reverseY==true)&&(y<0)){
       reverseY=false;
       changeY=-1*changeY;
       }
       if(x>getWidth()){
       changeX=-1*(changeX);
       reverseX=true;
       }
       if((reverseX==true)&&(x<0)){
       changeX=-1*(changeX);
       reverseX=false;
       }

    }
      class TimerListener implements ActionListener{
           public void actionPerformed(ActionEvent e){
           repaint();

           }

        @Override
        public void onFailure(int arg0) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onSuccess() {
            // TODO Auto-generated method stub

        }

       }

}
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-19 15:47:07

你使用计时器的方式不适用于Android。没有像Timer(10,new TimerListener())这样的构造函数

使用计时器的最快方法是在下面的代码片段中:

Timer t = new Timer();
t.schedule(new TimerTask() {
    @Override
    public void run() {

    }
}, _delay, _period);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15492390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档