android - 如何让球保持移动

标签 android

我正在尝试创建一个简单的应用程序,其中有一个球在屏幕边缘四处移动并反射出来。 我已经找到了如何创建我的球。但是我无法移动它。

到目前为止,这是我的代码。

protected void onCreate(Bundle savedInstanceState) {
    initial_x=100;
    initial_y=100;
    speed_x=1;
    speed_y=1;
    x=initial_x;
    y=initial_y;

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);     
    draw();

}
private void draw() {



    DisplayMetrics displaymetrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
    height = displaymetrics.heightPixels;
    width = displaymetrics.widthPixels;



    Log.d("dimensions",String.valueOf(width));
    Log.d("dimensions",String.valueOf(height));


    Bitmap bitmap = Bitmap.createBitmap(width, height, Config.RGB_565);

    g = new Canvas(bitmap);
    g.drawColor(Color.WHITE);
    paint = new Paint();
    paint.setColor(Color.RED);
    g.drawCircle(50,50, 20, paint); //Put your values

    // In order to display this image, we need to create a new ImageView that we can display.
    ImageView imageView = new ImageView(this);

    // Set this ImageView's bitmap to ours
    imageView.setImageBitmap(bitmap);

    // Create a simple layout and add imageview to it.
    RelativeLayout layout = new RelativeLayout(this);
    RelativeLayout.LayoutParams params = new
                RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
    params.addRule(RelativeLayout.CENTER_IN_PARENT);

    layout.addView(imageView, params);
    layout.setBackgroundColor(Color.BLACK);

    // Show layout in activity.
    setContentView(layout);

    layout.setOnClickListener(l);



}

我已经设置了一个 onclick 监听器,基本上可以在我触摸屏幕时移动球。我如何使它成为一个连续的过程?

编辑:

我将 onclicklistener 更改为 ontouchlistener 以在我触摸屏幕时保持球移动,但它仍然像 onclick 监听器一样工作。这是代码

OnTouchListener l = new OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {


        // TODO Auto-generated method stub

        switch(event.getAction())
        {
        case MotionEvent.ACTION_DOWN:
            g.drawColor(Color.WHITE);
            x+=speed_x;
            y+=speed_y;
            g.drawCircle(x, y, 20, paint);
            if(x==0)
                speed_x=-1;
            if(x==height)
                speed_x=1;
            if(y==0)
                speed_y=-1;
            if(y==width)
                speed_y=1;
            v.invalidate();
            break;

        }

        return false;
    }
};

最佳答案

使用 TimerTask定期持续更新位置。大概每秒 10 到 30 次就足够了。

将绘图和位置更新逻辑放在 TimerTaskrun() 方法中,因为创建另一个线程将不起作用。 (绘图必须发生在 GUI 线程上)。

希望这对您有所帮助。

编辑:

TimerTask myTimerTask = new TimerTask() {
    @Override
    public void run() {
        // Update logic here

        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                // Drawing logic here
            }
        });
    }
}
Timer timer = new Timer();
timer.schedule(myTimerTask, 50, 50);

关于android - 如何让球保持移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22568146/

相关文章:

android - 在另一个 Layout.xml 和 Activity 上设置背景资源

android - 如何使用 Android 的架构组件从 ViewModel 完成 Activity ?

javax/xml/bind/JAXBException 使用 gradle 构建

android - 添加新 Activity 时 AndroidManifest.xml 中的重复属性错误

android - RecyclerView + CardView + 触控反馈

android - 在 Android 中将图像复制到剪贴板

android - 无法解析应用程序描述符 AIR

android - 滚动后 Recyclerview 截断文本

java - 适用于 Android 的 Firebase 数据库,检索数据时遇到问题

android - 使用 ORMLITE 在 Android 中的多个查询条件