如何保持球的运动

时间:2014-03-21 19:45:29

标签: 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;
    }
};

1 个答案:

答案 0 :(得分:1)

使用TimerTask定期更新位置。可能每秒10到30次就足够了。

将绘图和位置更新逻辑放在run()的{​​{1}}方法中,因为创建另一个线程不起作用。 (绘图必须在GUI线程上进行。)

希望这有帮助。

修改

TimerTask