我的Android应用程序有问题,它在平面上绘制功能图。为此,我使用自定义视图。用户可以通过触摸平移坐标系。在onDraw方法中,坐标系和标签直接在视图的画布上绘制,但是图形本身被缓冲到另一个位图上(出于性能原因) - 在手指移动期间,这个位图被绘制到视图的画布上为了匹配坐标系,只有当用户松开触摸时才重绘功能。
public void onDraw(Canvas canvas){
if (start) {
bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_4444);
hCanvas = new Canvas(bitmap);
start = false;
}
drawCoordinateSystem(canvas);
drawFunctions(canvas,bitmap,hCanvas);
}
在onTouch事件监听器中,我调用invalidate()。有一个布尔“移动”,对于ACTION_UP设置为true,对于ACTION_DOWN设置为false。
public void drawFunctions(Canvas canvas,Bitmap bitmap,Canvas hCanvas){
if (moving) canvas.drawBitmap(bitmap,left+translateX,top+translateY,paint);
else {
hCanvas.drawColor(Color.TRANSPARENT,PorterDuff.Mode.CLEAR);
//code for drawing the functions on hCanvas
canvas.drawBitmap(bitmap,0,0,paint);
}
}
在ACTION_MOVE中,我会适当地计算translateX和translateY值。
现在问题出在哪里: 如果我为sdk 10编译应用程序,它可以在我测试它的所有设备上正常工作(android 2.2-4.2智能手机和平板电脑,虚拟和物理)。但是,当我为sdk 14编译它时,它适用于许多设备,除了一些平板电脑,其中坐标系正确绘制,但不知何故,包含这些功能的位图没有在视图的画布上绘制,并且功能不可见。奇怪的是,如果我尝试从视图的画布中创建一个位图:
Bitmap bmp = this.getDrawingCache();
bmp.compress(Bitmap.CompressFormat.PNG, 100, out);
在保存的位图中,功能可见。
另一件事是 - 问题出现在i.a. Nexus 7,同时在使用预设Nexus 7创建的AVD上,一切正常。
可能是什么问题?
答案 0 :(得分:1)
http://developer.android.com/reference/android/graphics/Bitmap.Config.html
我将复制并粘贴相关部分: Bitmap.Config ARGB_4444此字段在API级别已弃用。因为穷人 这种配置的质量,建议改为使用ARGB_8888 Bitmap.Config ARGB_8888每个像素存储在4个字节上。
将您的4444更改为8888,它应该可以正常工作。