您好,提前谢谢您。
我正在尝试为 imageView 中的图像创建单击缩放动画。
我正在使用这个例子Here来自 Android 开发者。
效果很好……而且正是我正在寻找的。然而,它扩展成的图像似乎来自drawable文件夹。
我想要扩展的图片是由用户通过相机创建的,并存储在应用程序文件夹中。
这就是我调用图片并将其设置为我想要使用的 imageView 的方式:
ContextWrapper cw = new ContextWrapper(getApplicationContext());
File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);
final File mypath=new File(directory,"Pic_"+fileName+".jpg");
loadImageFromStorage(mypath.toString());
private void loadImageFromStorage(String path)
{
try {
File f=new File(path);
Bitmap b = BitmapFactory.decodeStream(new FileInputStream(f));
ImageView img=(ImageView)findViewById(R.id.imageView7);
img.setImageBitmap(b);
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
}
这是 Android 开发人员示例的相关部分:
final View thumb1View = findViewById(R.id.thumb_button_1);
thumb1View.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
zoomImageFromThumb(thumb1View, R.drawable.image1);
}
});
private void zoomImageFromThumb(final View thumbView, int imageResId) {
// If there's an animation in progress, cancel it
// immediately and proceed with this one.
if (mCurrentAnimator != null) {
mCurrentAnimator.cancel();
}
// Load the high-resolution "zoomed-in" image.
final ImageView expandedImageView = (ImageView) findViewById(
R.id.expanded_image);
expandedImageView.setImageResource(imageResId);
如您所见,“imageResid”来自 r.drawable.image1
我知道动画工作正常...因为我可以将示例保存到可绘制对象并对其进行测试。
但是...我不知道如何让它与 ImageView 中的图像一起使用。
我尝试了一些方法...例如将 Android 开发人员示例更改为 ExpandImageView.setImageBitmap(b) 而不是 ExpandImageView.setImageResource()
并且可以加载位图...并执行动画...并且它扩展了图片...但是图像质量非常差,我认为这是由原始压缩引起的,尽管我在印象中 .png 让它损失更少。
我这样做是这样的:
try {
fos = new FileOutputStream(mypath);
imageBitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
我对 Android 设计还很陌生,我相信可能有一种简单的方法可以完成我想要的事情。先感谢您。
EDIT - 1/21/16
嗯...因为没有人回答。我想我会在阅读完一些内容后添加评论。位图仅返回缩略图。所以本质上我只是扩展缩略图,无论质量如何。
我将不得不尝试不同的根来获取图片。我尝试了 Android 开发人员中的示例...但没有成功。相机甚至从未初始化过。
我想要的是拍照...将其保存到一个文件中,该文件不是 SD 卡,也不是用户的媒体库,而是一个私有(private)文件夹。然后能够从 Activity 中将该图像调用到 ImageView 中。如果有人有任何建议,我将不胜感激。
最佳答案
我猜你指的是这个链接https://developer.android.com/training/animation/zoom#java正确的? 我之前也遇到过和你一样的问题,我已经解决了。
final View thumb1View = findViewById(R.id.thumb_button_1);
thumb1View.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
zoomImageFromThumb(thumb1View, R.drawable.image1);
}
});
删除
thumb1View
onclick 监听器内的R.drawable.image1
。private void zoomImageFromThumb(final View thumbView, int imageResId) { // If there's an animation in progress, cancel it // immediately and proceed with this one. if (mCurrentAnimator != null) { mCurrentAnimator.cancel(); } // Load the high-resolution "zoomed-in" image. final ImageView expandedImageView = (ImageView) findViewById(R.id.expanded_image); expandedImageView.setImageResource(imageResId);
删除 private void
zoomImageFromThumb
处的int imageResId
。 并将expandedImageView
链接到我自己的链接,而不是expandedImageView.setImageResource(imageResId)
。private void zoomImageFromThumb(final View thumbView) { // If there's an animation in progress, cancel it // immediately and proceed with this one. String imageUrl = getIntent().getStringExtra("photo"); final String localPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath() + "/" + imageUrl; new File(localPath); if (mCurrentAnimator != null) { mCurrentAnimator.cancel(); } // Load the high-resolution "zoomed-in" image. final ImageView expandedImageView = (ImageView) findViewById(R.id.expanded_image); expandedImageView.setImageBitmap(BitmapFactory.decodeFile(localPath));
然后就变成这样了,这就是我修改代码的方式,然后现在我可以从外部链接而不是从drawable资源扩展
imageview
,你需要找到自己的如何获取链接并将其链接到expandedImageView
。
关于java - 缩放 View - 不是从可绘制 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34917044/