我在一些摩托罗拉设备上遇到了一个奇怪的问题,我得到一个Bitmap
在ImageView
. 这是为 android 4.2.4 以单声道编程的。
基本上我的问题是DrawingCache
在某些设备上返回 null,即摩托罗拉设备。我已经四处寻找解决方案,但建议的方法都没有奏效。我只是不明白为什么这适用于某些设备而不适用于其他设备?
我可以使用 拉出整个图像ImageView.Drawable
,但是缺少对其进行的所有操作,因此这并不是真正需要的。
有人对为什么会发生这种情况或可能的解决方法有任何建议吗?
try
{
//pictureView is an ImageView
pictureView.DrawingCacheEnabled = true;
using (var bmp = pictureView.DrawingCache)
{
if (bmp != null)
{
}
}
}
finally
{
_pictureView.DrawingCacheEnabled = false;
}
我们的应用程序是用 Mono for Android 编写的,但欢迎使用 Java 回答。
更新:我创建了一个 android 应用程序来显示我遇到的问题。我正在使用的开源项目是允许用户放大图像。使用摩托罗拉模拟器无法显示位图,而 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());
}
}
}
}