java - 缩放 View - 不是从可绘制 View

标签 java android android-studio

您好,提前谢谢您。

我正在尝试为 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);
        }
    });
  1. 删除 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);
    
  2. 删除 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));
    
  3. 然后就变成这样了,这就是我修改代码的方式,然后现在我可以从外部链接而不是从drawable资源扩展imageview,你需要找到自己的如何获取链接并将其链接到 expandedImageView

关于java - 缩放 View - 不是从可绘制 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34917044/

相关文章:

java - 谷歌应用程序引擎java后端_ah/start

android - 如何使用fragments在一个屏幕上打开两个webview

javascript - 使用 StringRequest 通过 GDScript POST 到 Google Sheet。 GDScript 可以工作,但应用程序停止运行

java - 查看全局类变量?

尽管已添加为受信任站点,Java Applet 仍不运行

java - Fortify 警告 - 不受支持的 JVM

java - 修改/增强 YouTube 教程以在内部播放视频

android - 如何使 FrameLayout 填充其父级的高度以便整个页面一起滚动?

android - 三星支付整合

java - 如何以编程方式创建 .sfa snd .sfb 文件