如何在android中实现图像视图的缩放效果?

如何在android中实现图像视图的缩放效果?,android,image,zooming,Android,Image,Zooming,我必须实现图像缩放,我尝试了很多代码,但我没有完全了解手势事件。我想实现当我们应用双击时,图像将根据触摸位置(事件x和y)进行缩放。我现在只能实现缩放,没有平移。有人能建议我吗 编辑: 实际上,我已经用图像实现了viewflipper,如果我尝试应用平移和缩放效果,有时图像会发生更改。我想在用户单击的位置实现缩放效果。 给我一些想法….这里是一个关于如何使用imageview实现触摸缩放效果的好例子 编辑: 还有一个很棒的 这实际上是安卓系统中图像缩放和平移的最佳示例 懒人可以使用,只需在项目

我必须实现图像缩放,我尝试了很多代码,但我没有完全了解手势事件。我想实现当我们应用双击时,图像将根据触摸位置(事件x和y)进行缩放。我现在只能实现缩放,没有平移。有人能建议我吗

编辑: 实际上,我已经用图像实现了viewflipper,如果我尝试应用平移和缩放效果,有时图像会发生更改。我想在用户单击的位置实现缩放效果。


给我一些想法….

这里是一个关于如何使用imageview实现触摸缩放效果的好例子

编辑:

还有一个很棒的


这实际上是安卓系统中图像缩放和平移的最佳示例

懒人可以使用,只需在项目内部导入

ImageView mImageView;
PhotoViewAttacher mAttacher;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Any implementation of ImageView can be used!
    mImageView = (ImageView) findViewById(R.id.iv_photo);

    // Set the Drawable displayed
    Drawable bitmap = getResources().getDrawable(R.drawable.wallpaper);
    mImageView.setImageDrawable(bitmap);

    // Attach a PhotoViewAttacher, which takes care of all of the zooming functionality.
    mAttacher = new PhotoViewAttacher(mImageView);
}


// If you later call mImageView.setImageDrawable/setImageBitmap/setImageResource/etc then you just need to call
mAttacher.update();

这是一种最有效的方法,它可以顺利工作:

放置在您的项目中。然后,它可以与
ImageView

示例:

TouchImageView img = (TouchImageView) findViewById(R.id.img);
    <com.example.touch.TouchImageView
            android:id="@+id/img”
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
如果在xml中使用
TouchImageView
,则必须提供完整的软件包 名称,因为它是自定义视图

示例:

TouchImageView img = (TouchImageView) findViewById(R.id.img);
    <com.example.touch.TouchImageView
            android:id="@+id/img”
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

您可以在相关问题中查看答案。

只需导入库

并在布局文件中添加以下内容:

<LinearLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:gesture-image="http://schemas.polites.com/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent">

<com.polites.android.GestureImageView
   android:id="@+id/image"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:src="@drawable/image"
   gesture-image:min-scale="0.1"
   gesture-image:max-scale="10.0"
   gesture-image:strict="false"/>`

`
我更喜欢图书馆 超过 (Star18位的答案)

  • 两者都是活跃项目(2015年都有一些承诺)
  • 两者都在PlayStore上有一个演示
  • 子采样比例图像视图支持大图像(1080p以上),无子采样导致的内存异常
  • 子采样比例图像视图似乎有更大的API和更好的文档

你看,如果你喜欢在Eclipse/ADT中使用子采样比例图像视图,我希望你做得很好。当他们想在你的应用程序中添加新功能时,这经常发生在all上,然后通常他们都会搜索库,这不是一个好策略,因为你不知道库中的代码是什么。因此,我总是更喜欢分叉库,并在应用程序代码中添加有用的类和方法

因此,当我遇到同样的问题时,我做了大量的研发,然后我找到了一个类,它提供了缩放、移动和pinIn和out的功能。所以你可以看到那门课

正如我之前所说,这是一个单一的类。因此,您可以将该类放在项目中的任何位置,如utils文件夹,并将以下行放入XML文件中,如:

<your_packege_name.TouchImageView
        android:id="@+id/frag_imageview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="fitCenter"
        android:src="@drawable/default_flag"
        android:transitionName="@string/transition_name_phone" /> 
这就是
触摸图像视图
。 享受我们的代码:)

非常简单的方法(经过测试):-

PhotoViewAttacher pAttacher;
pAttacher = new PhotoViewAttacher(Your_Image_View);
pAttacher.update();
在build.gradle中添加以下行:-

compile 'com.commit451:PhotoView:1.2.4'

下面是
ImageFullViewActivity
类的代码

 public class ImageFullViewActivity extends AppCompatActivity {

        private ScaleGestureDetector mScaleGestureDetector;
        private float mScaleFactor = 1.0f;
        private ImageView mImageView;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.image_fullview);

            mImageView = (ImageView) findViewById(R.id.imageView);
            mScaleGestureDetector = new ScaleGestureDetector(this, new ScaleListener());

        }

        @Override
        public boolean onTouchEvent(MotionEvent motionEvent) {
            mScaleGestureDetector.onTouchEvent(motionEvent);
            return true;
        }

        private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
            @Override
            public boolean onScale(ScaleGestureDetector scaleGestureDetector) {
                mScaleFactor *= scaleGestureDetector.getScaleFactor();
                mScaleFactor = Math.max(0.1f,
                        Math.min(mScaleFactor, 10.0f));
                mImageView.setScaleX(mScaleFactor);
                mImageView.setScaleY(mScaleFactor);
                return true;
            }
        }
    }


事实上,我也使用相同的代码,但问题是我必须检测双击2次,第一件事是缩放单击的图像,第二件事是恢复图像。我不知道如何实现第一件事。你能帮我吗?这里提供的代码可能有助于利用这个答案非常有用。我测试了一下,非常满意。如何在eclipse中导入此库,因为在中导入后,我发现其中有错误…@pks您可以从这里下载库直接链接:只需将jar文件放入您的lib文件夹并享受:)@star18bit非常感谢您共享此库。它的工作原理很像charm:)@Umar你怎么知道,它被弃用了?这一个在android 6.0上崩溃了它给我一个错误
android.widget.ImageView不能转换到pl.company.project.TouchImageView
@PolGraphic你能告诉我你是如何使用TouchImageView的吗?它有渐变用法吗?@Choletski-我没听懂你的意思。你的意思是它可以用gradle吗?您只需要添加一个java类就可以了。这个库仍然处于活动状态这是我之前发布的一篇关于这个问题的文章,如何在图像视图中应用它?我的意思是我以编程方式添加图像视图。我更喜欢使用android API的简单实现,而不是像其他任何人一样使用外部库。但是,你的答案是完整的,只要在缩放的图像周围拖动逻辑。正确缩放并不是那么简单,因为缩放应该围绕指针(手指)之间的点进行,添加柔和的动画也不是那么容易,我认为拥有它是非常好的。如果这不是应用程序的核心逻辑,那么利用外部解决方案可能是一个好主意。您可以按照此链接使用zoomageView放大和缩小图像:-这是我的最佳解决方案。谢谢