我对用java编程相当陌生。现在我正在为课堂写一个小小的平台游戏。我面临的问题是:我画了一个男人的小bitmap到我的canvas。如果你触摸屏幕的右半部分,他应该向右移动。屏幕的左边也是一样的。我试图回忆一下单独的"CanvasClass“中的CanvasClass方法,它扩展了View Class,每次都更改绘制的bitmap的变量。帮助我使用失效/事后验证方法,我似乎无法理解它!谢谢:) GameActivity:
public class GameActivity extends Activity implements OnTouchListener{
CanvasClass ourView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ourView = new CanvasClass(this);
setContentView(ourView);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onTouch(View v, MotionEvent me) {
return false;
}}
CanvasClass:
public class CanvasClass extends View implements OnTouchListener {
Bitmap mBackground, BackScaled,bobOri, bobScale;
int width, height,bobWidth = 33, bobHeight = 93;
float meX = 20,meY = 400;
Canvas canvas;
public CanvasClass(Context context) {
super(context);
((Activity) getContext()).requestWindowFeature(Window.FEATURE_NO_TITLE);
((Activity) getContext()).getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
DisplayMetrics displaymetrics = getResources().getDisplayMetrics();
height =displaymetrics.heightPixels;
width = displaymetrics.widthPixels;
mBackground = BitmapFactory.decodeResource(getResources(), R.drawable.background);
((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
BackScaled = Bitmap.createScaledBitmap(mBackground, width, height,true);
bobOri = BitmapFactory.decodeResource(getResources(),R.drawable.bobertfront);
bobScale = Bitmap.createScaledBitmap(bobOri, bobWidth,bobHeight, true);
}
@Override
protected void onDraw(Canvas canvas){
super.onDraw(canvas);
canvas.drawBitmap(BackScaled,0,0,null);
canvas.drawBitmap(bobScale,20,410,null);
}
@Override
public boolean onTouch(View v, MotionEvent me) {
return true;
}}
如果你还需要什么,请问!我将每5-10分钟查看一次回复,谢谢:)
发布于 2013-10-21 13:12:01
你的问题到底是什么?
要使onDraw()再次被调用,您需要调用失效()。失效和postInvalidate的区别在于,需要从UI线程调用无效,而postInvalidate可以从其他线程调用.
在您的情况下,无效应该能起作用。
参考文献
http://developer.android.com/reference/android/view/View.html#invalidate()和http://developer.android.com/reference/android/view/View.html#postInvalidate()
发布于 2013-10-21 13:36:35
在我看来,您需要刷新onDraw实现onPause方法
https://stackoverflow.com/questions/19494514
复制相似问题