【发布时间】:2016-12-31 02:23:06
【问题描述】:
当我的用户点击我希望放大的图片时,我的应用会显示图片和文字。
到目前为止,我是通过显示 Bitmap 的 Activity 来完成的:
// ImageView containing the image.
final ImageView apd = (ImageView) view.findViewById(R.id.apd_image);
apd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// Save ImageView as Bitmap
apd.setDrawingCacheEnabled(true);
apd.buildDrawingCache(true);
Bitmap bitmap = apd.getDrawingCache();
// Create intent and set image to display.
Intent intent = new Intent(getActivity(), GalleryDetailsActivity.class);
intent.putExtra("image", bitmap);
//Start details activity
startActivity(intent);
apd.destroyDrawingCache();
}
});
这里是Activity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.gallery_details_activity);
Bitmap bitmap = getIntent().getParcelableExtra("image");
ImageView imageView = (ImageView) findViewById(R.id.image);
imageView.setImageBitmap(bitmap);
}
但是当我点击我的图片时,我在调试器中收到以下错误消息:
E/JavaBinder: !!! Binder 交易失败!!!
一些研究让我降低图像质量以便像这样显示它:
final float densityMultiplier = getResources().getDisplayMetrics().density;
int h = (int) (50 * densityMultiplier);
int w = (int) (h * bitmap.getWidth() / ((double) bitmap.getHeight()));
bitmap = Bitmap.createScaledBitmap(bitmap, w, h, true);
它有效,但这不是我想要的。
有没有办法扩大我的形象并保持其质量?
编辑:
按照建议,我现在将图片保存在我的文件系统中,如下所示:
private void savePicture(String filename, Bitmap b, Context ctx){
try {
ObjectOutputStream oos;
FileOutputStream out;// = new FileOutputStream(filename);
out = ctx.openFileOutput(filename, Context.MODE_PRIVATE);
oos = new ObjectOutputStream(out);
b.compress(Bitmap.CompressFormat.PNG, 100, oos);
oos.close();
oos.notifyAll();
out.notifyAll();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
并像这样在活动中加载它:
private Bitmap loadPicture(String filename) {
Bitmap b = null;
try {
FileInputStream fis = openFileInput(filename);
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(fis);
} catch (IOException e1) {
e1.printStackTrace();
}
b = BitmapFactory.decodeStream(ois);
try {
ois.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return b;
}
我现在想以更大的尺寸显示它。
【问题讨论】: