平面上に関数のグラフを描画する 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);
保存されたビットマップでは、関数が表示されます。
もう1つのことは、問題はNexus 7で発生しますが、プリセットのNexus 7で作成されたAVDではすべて正常に動作します。
何が問題になる可能性がありますか?