我需要实现图片缩放,已经尝试了许多代码,但是对于手势事件的完整理解还不够。我想要实现双击时,根据触摸点(事件x和y)缩放图像。这一次只需要实现缩放,而无需平移。有没有人能给我提供一些建议呢?
编辑: 实际上,我已经实现了带有图像的ViewFlipper,如果我尝试应用平移和缩放效果,有时候图像会被更改。 我想要在用户单击的地方实现缩放效果。
请给我一些想法......
我需要实现图片缩放,已经尝试了许多代码,但是对于手势事件的完整理解还不够。我想要实现双击时,根据触摸点(事件x和y)缩放图像。这一次只需要实现缩放,而无需平移。有没有人能给我提供一些建议呢?
编辑: 实际上,我已经实现了带有图像的ViewFlipper,如果我尝试应用平移和缩放效果,有时候图像会被更改。 我想要在用户单击的地方实现缩放效果。
请给我一些想法......
懒人可以使用这个库,只需将其导入到您的项目中即可。
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);
如果您在xml中使用TouchImageView
,则必须提供完整的包名称,因为它是一个自定义视图。
示例: <com.example.touch.TouchImageView
android:id="@+id/img”
android:layout_width="match_parent"
android:layout_height="match_parent" />
希望你一切顺利。当我们想要在应用中添加新功能时,通常会搜索库,这并不是一个好的策略,因为你不知道那个库中包含什么样的代码。所以我总是喜欢 fork 库并将有用的类和方法添加到我的应用程序代码中。
所以当我遇到同样的问题时,我进行了大量的研究和开发,然后找到了一个能够实现缩放、放大和缩小的类。你可以在这里查看这个类。
正如我之前所说,它只是一个单独的类,你可以将这个类放在项目中的任何地方,比如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" />
你可以像处理其他视图一样在你的Activity中找到该图片视图,例如:
TouchImageView tv=(TouchImageView)findViewById(R.id.frag_imageview);
tv.setImageResource(R.drawable.ic_play);
这就是关于TouchImageView
的全部内容。
享受我们的代码吧 :)
非常简单的方法(已测试):-
PhotoViewAttacher pAttacher;
pAttacher = new PhotoViewAttacher(Your_Image_View);
pAttacher.update();
在 build.gradle 文件中添加以下行:compile 'com.commit451:PhotoView:1.2.4'
这实际上是Android中图像缩放和平移的最佳示例,
http://blog.sephiroth.it/2011/04/04/imageview-zoom-and-scroll/
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;
}
}
}
我更喜欢库davemorrissey/subsampling-scale-image-view,而不是chrisbanes/PhotoView(star18bit的回答)。
如果您想在Eclipse / ADT中使用subsampling-scale-image-view,请参见如何将AAR转换为JAR
<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"/>`