【发布时间】:2011-10-23 02:52:24
【问题描述】:
我有一个SurfaceView,我在其中设置背景颜色和图像,如下所示:
BitmapDrawable tiledBackground = new BitmapDrawable(BitmapFactory.decodeResource(getResources(), R.drawable.background));
tiledBackground.setTileModeX(Shader.TileMode.REPEAT);
tiledBackground.setColorFilter(0xaacceeff, PorterDuff.Mode.DST_OVER);
this.setBackgroundDrawable(tiledBackground);
我还有一个动画线程,我正在其中绘制图像(连续调整其 x 坐标,使其看起来向左移动)。背景图像是透明的 PNG,因此其中的某些部分是透明的。我从线程中绘制的图像似乎出现在SurfaceView 上的可绘制背景下方。我怎样才能让它出现在背景之上?我正在像这样绘制图像:
private void doDraw(Canvas canvas) {
canvas.drawColor(Color.BLACK);
canvas.drawBitmap(missile, x, getHeight() - 95, paint);
canvas.restore();
}
missile和paint在线程的构造函数中初始化为:
missile = Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.missile));
paint = new Paint();
【问题讨论】:
-
可能行不通,但请尝试在 onDraw 方法的开头添加 super.doDraw(canvas)。
-
doDraw不是Thread的一部分,所以我不能打电话给super.doDraw()。 -
哦,对不起,我把你的 doDraw 和 onDraw 混在一起了……我以为它属于扩展的 Surfaceview。 doDraw 在什么类?你从哪里叫它?
-
别担心!
doDraw在一个名为AnimationThread的类中,它扩展了Thread。我从我的线程的run()方法中调用它。 -
当你调用doDraw时,你从哪里得到画布?
标签: android canvas surfaceview