我要实现图像的放大,我已经有这么多codes.But尝试我没有得到手势事件的完整想法。 我想实现当我们运用双击,图像将放大根据触摸的地方(事件x和y)。我只落实在这个时候没有任何pan.Can体建议我缩放?
编辑:其实我已经实现与图像viewflipper,如果我尝试应用平移和缩放效果,有时图像将被改变。 我希望实现用户点击其中的变焦效果 。
给我的一些想法....
我要实现图像的放大,我已经有这么多codes.But尝试我没有得到手势事件的完整想法。 我想实现当我们运用双击,图像将放大根据触摸的地方(事件x和y)。我只落实在这个时候没有任何pan.Can体建议我缩放?
编辑:其实我已经实现与图像viewflipper,如果我尝试应用平移和缩放效果,有时图像将被改变。 我希望实现用户点击其中的变焦效果 。
给我的一些想法....
懒惰的人可以使用这个lib中 ,只要你的项目中导入
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();
这是最有效的方式之一,工程进展顺利:
https://github.com/MikeOrtiz/TouchImageView
将TouchImageView.java
在您的项目。 然后,它可以使用相同ImageView
。
例:
TouchImageView img = (TouchImageView) findViewById(R.id.img);
如果您使用的TouchImageView
在XML中,则必须提供完整的包名称,因为它是一个自定义视图。
例:
<com.example.touch.TouchImageView
android:id="@+id/img”
android:layout_width="match_parent"
android:layout_height="match_parent" />
下面是关于如何实现变焦与ImageView的触摸影响一个很好的例子
缩放上ImageView的影响
编辑:
另外这里是另一个伟大的一个。
捏缩放教程
很简单的方法(测试): -
PhotoViewAttacher pAttacher;
pAttacher = new PhotoViewAttacher(Your_Image_View);
pAttacher.update();
加入波纹线的build.gradle: -
compile 'com.commit451:PhotoView:1.2.4'
我希望你做well.it往往与一切发生时,他们要在你的应用程序添加新的功能,那么通常它们都在寻找这不是很好的战术,因为客人不愿意知道的是在libabry什么样的代码库。 所以我总是喜欢叉库,并添加我的应用程序代码中的有用的类和方法。
所以当我坚持了同样的问题,我做很多很多R&d的话,我觉得一个类这给能力zoomIn,缩小(ZoomOut)和PININ进出。 所以你可以看到这个类在这里。 。
所以我曾告诉过,它是一个单独的类。 所以你可以把这个类中的任何地方你的项目,如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" />
你可以发现,图像查看您的尊敬的活动,像你一样像所有的观点 - :
TouchImageView tv=(TouchImageView)findViewById(R.id.frag_imageview);
tv.setImageResource(R.drawable.ic_play);
这就是它TouchImageView
。 享受我们的代码:)
这其实是有史以来的图像缩放和平移在Android上最好的例子,
http://blog.sephiroth.it/2011/04/04/imageview-zoom-and-scroll/
您可以检查答案在一个相关的问题。 https://stackoverflow.com/a/16894324/1465756
只需导入库https://github.com/jasonpolites/gesture-imageview 。
到你的项目,并添加你的布局文件如下:
<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"/>`
余者优先库davemorrissey /子采样尺度图像视图 上 chrisbanes / PhotoView中 (star18bit的回答)
请参阅如何AAR转换成JAR ,如果你喜欢用二次抽样规模的图像视图使用Eclipse / ADT
下面是代码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;
}
}
}