ピンチズームを可能にするライブラリであるImageViewTouchで描画しようとしています。 Canvasを使用して画像上に描画できますが、画像をズームすると、描画が消えます。
このために、ビューをビットマップに変換し、この同じビューにImageBitmapを設定しようとしています。コードは次のとおりです。
mImage.setDrawPath(true);
mImage.setImageBitmap(loadBitmapFromView(mImage));
public static Bitmap loadBitmapFromView(View v) {
Bitmap b = Bitmap.createBitmap( v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
v.layout(0, 0, v.getWidth(), v.getHeight());
v.draw(c);
return b;
}
これを行うと、次のログエラーが表示されます。
07-11 21:13:41.567: E/AndroidRuntime(20056): Java.lang.IllegalArgumentException: width and height must be > 0
07-11 21:13:41.567: E/AndroidRuntime(20056): at Android.graphics.Bitmap.createBitmap(Bitmap.Java:638)
07-11 21:13:41.567: E/AndroidRuntime(20056): at Android.graphics.Bitmap.createBitmap(Bitmap.Java:620)
loadBitmapFromView
呼び出しを削除すると、通常、画像の上に描画が表示されます。画像を操作しようとすると(ズームインまたはズームアウトなど)、図面が消え、写真である背景画像のみが残ります。
---編集---
loadBitmapFromView
呼び出しの後に追加されたコードを次に示します。場合は次のとおりです。ラジオグループリスナがあり、ラジオボタンをチェックするとき、画像を読み込み、その上に可能な図面を描画する必要があります。その後、すべて(画像と図面)のみを変換しようとしています。 1つのビットマップ。
コードのその他の部分は次のとおりです。
bitmap = BitmapUtils.decodeSampledBitmapFromResource(root + DefinesAndroid.CAMINHO_SHOPPINGS_SDCARD + nomeImagemAtual, size.x, size.y);
mImage.setImageBitmap(bitmap);
その後、描画する必要があるものをすべて描画し、表示したloadImageBitmapメソッドを使用してビューをビットマップに変換しようとします。
Android Developers http://developer.Android.com/training/displaying-bitmaps/load-bitmap.htmlでこのリンクから取得したdecodeSampledBitmapFromResource
メソッド
私はついに自分の問題の解決策を見つけました。
ビューのpost
メソッドを使用しています。これは、ビューの測定とレイアウトの後にのみ実行されます。このようにgetWidth()
およびgetHeight()
は実際の幅を返し、高さ。
コードサンプルは次のとおりです。
mImage.post(new Runnable() {
@Override
public void run() {
mImage.setImageBitmap(loadBitmapFromView(mImage));
}
});
それが他の誰かにも役立つことを願っています:)
他のすべてが正しければ、コードの実行が早すぎます。
ビューのレイアウトは、Androidによってまだ測定されていません。 OnResumeで実行してみて、これが問題かどうかを確認してください。
乾杯!
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
loadBitmapFromView(mImage);
}
}, 1000);
_Java.lang.IllegalArgumentException: width and height must be > 0
_は、Bitmap.createBitmap()
呼び出しでv.getLayoutParams().width
またはv.getLayoutParams().height
が0であるためです。おそらく、LayoutParams
がmImage
に誤って設定されています。
更新:setLayoutParams()
を使用する前のmImage
のcreateBitmap()
。このようなもの:
_LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(30, 30);
mImage.setLayoutParams(layoutParams);
_
私の場合、親orientation
のvertical
をLinearLayout
に設定するのを忘れており、horizontal
のデフォルト値が設定されているので、問題はなくなりました...
Android:orientation="vertical"