我的 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);
在保存的位图中,功能是可见的。
另一件事是 - ia Nexus 7 出现问题,同时在使用预设 Nexus 7 创建的 AVD 上一切正常。
可能是什么问题?