我正在尝试创建一个简单的应用程序,其中有一个球在屏幕边缘四处移动并反射出来。 我已经找到了如何创建我的球。但是我无法移动它。
到目前为止,这是我的代码。
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 次就足够了。
将绘图和位置更新逻辑放在 TimerTask
的 run()
方法中,因为创建另一个线程将不起作用。 (绘图必须发生在 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/