Bitmap
一部の Motorola デバイスで、 の内部でクロップおよびスケーリングされた が得られるという奇妙な問題が発生していImageView
ます。これは、Android 4.2.4 の mono でプログラムされています。
基本的に私の問題はDrawingCache
、一部のデバイス、つまり Motorola デバイスで null を返すことです。これに対する解決策を探しましたが、提案された方法はどれも機能しませんでした。これが一部のデバイスで機能し、他のデバイスでは機能しない理由がよくわかりません。
を使用して画像全体を引き出すことはできますImageView.Drawable
が、それではすべての操作が行われていないため、これはあまり望ましくありません。
なぜこれが起こっているのか、または可能な回避策について何か提案はありますか?
try
{
//pictureView is an ImageView
pictureView.DrawingCacheEnabled = true;
using (var bmp = pictureView.DrawingCache)
{
if (bmp != null)
{
}
}
}
finally
{
_pictureView.DrawingCacheEnabled = false;
}
私たちのアプリは Android 用の Mono で書かれていますが、Java の回答は大歓迎です。
更新: 私が抱えている問題を表示する Android アプリケーションを作成しました。私が使用しているオープン ソース プロジェクトは、ユーザーが画像を拡大できるようにするためのものです。Motorola エミュレータを使用するとビットマップの表示に失敗しますが、x86 エミュレータはビットマップの表示で正しく機能します。
public class TouchImageViewActivity extends Activity implements OnClickListener{
/** Called when the activity is first created. */
Button mButton;
TouchImageView mImage;
ImageView mImageView;
Bitmap mBmp;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ImageView img = new ImageView(this);
Bitmap snoop = BitmapFactory.decodeResource(getResources(), R.drawable.snoopy);
setContentView(R.layout.main);
mButton = (Button)findViewById(R.id.button1);
mButton.setOnClickListener(this);
mImage = (TouchImageView)findViewById(R.id.imageButton1);
mImage.setImageBitmap(snoop);
mImage.setMaxZoom(4f);
mImageView = (ImageView)findViewById(R.id.imageView1);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(v.getId() == mButton.getId())
{
try
{
mImage.setDrawingCacheEnabled(true);
mBmp = mImage.getDrawingCache(false);
if(mBmp != null && !mBmp.isRecycled())
{
Toast toast = Toast.makeText(v.getContext(), "BITMAP NOT NULL! ZOMG", Toast.LENGTH_LONG);
toast.show();
mImageView.setImageBitmap(mBmp);
mImageView.invalidate();
}
else
{
Toast toast = Toast.makeText(v.getContext(), "BITMAP IS NULL! BOOO", Toast.LENGTH_LONG);
toast.show();
}
}
catch(Exception exc)
{
Log.e("Test", exc.getMessage());
}
}
}
}