首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >召回/更新视图onDraw()

召回/更新视图onDraw()
EN

Stack Overflow用户
提问于 2013-10-21 12:27:40
回答 2查看 5.2K关注 0票数 1

我对用java编程相当陌生。现在我正在为课堂写一个小小的平台游戏。我面临的问题是:我画了一个男人的小bitmap到我的canvas。如果你触摸屏幕的右半部分,他应该向右移动。屏幕的左边也是一样的。我试图回忆一下单独的"CanvasClass“中的CanvasClass方法,它扩展了View Class,每次都更改绘制的bitmap的变量。帮助我使用失效/事后验证方法,我似乎无法理解它!谢谢:) GameActivity:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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分钟查看一次回复,谢谢:)

EN

回答 2

Stack Overflow用户

发布于 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()

票数 0
EN

Stack Overflow用户

发布于 2013-10-21 13:36:35

在我看来,您需要刷新onDraw实现onPause方法

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

https://stackoverflow.com/questions/19494514

复制
相关文章

相似问题

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