缩放视图 - 而不是绘制视图

时间:2016-01-21 06:45:44

标签: java android android-studio

嗨,谢谢你提前。

我正在尝试为imageView中的图像创建一个onclick缩放动画。

我正在使用Android Developer中的此示例Here

效果很好..而且正是我想要的。但是,它扩展的图像似乎来自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 Developer示例更改为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,我相信可能有一种简单的方法可以做我想要的事情。先感谢您。

  

编辑 - 1/21/16

嗯......因为没有人回答。我想我会在做一些阅读之后加上评论......位图仅返回缩略图。所以基本上我只是扩展缩略图,无论质量如何。

我将不得不尝试不同的根来获取图片。我在Android开发人员中尝试了这个例子......它没有用。相机从未初始化。

我想要的是拍照...将其保存到文件中,不是SD卡,而是用户媒体库,而是私人文件夹。然后可以将该图像从活动调用到图像视图中。如果有人有一些建议,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

我猜您是在引用此链接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. 移除R.drawable.image1 onclick侦听器内的thumb1View

    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. 在私用int imageResId处删除zoomImageFromThumb。 并将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. 然后变成这样,这就是我修改代码的方式,然后我可以从外部链接而不是可绘制资源扩展imageview,您需要找到自己的方式获取链接并将其链接到expandedImageView