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

     2023-02-21     251

关键词:

【中文标题】如何在android中实现图像视图的缩放效果?【英文标题】:How to implement zoom effect for image view in android? 【发布时间】:2012-01-14 00:26:57 【问题描述】:

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

编辑: 实际上我已经用图像实现了那个viewflipper,如果我尝试应用平移和缩放效果,有时图像会改变。我想在用户点击的地方实现缩放效果

给我一​​些想法......

【问题讨论】:

这里提供的代码可能对***.com/questions/5778532/…有帮助 利用github.com/rahulkapoor1/ZommableLoadingImageView 这个答案很有用。我对其进行了测试,并且非常强大。 ***.com/a/6650484/395093 【参考方案1】:

懒人可以用this 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();

【讨论】:

如何在 eclipse 中导入这个库,因为在导入后我得到了错误... @pks 你可以从这里下载库grepcode.com/snapshot/repo1.maven.org/maven2/… 直接链接:repo1.maven.org/maven2/com/github/chrisbanes/photoview/library/… 只需将 jar 文件放到你的 lib 文件夹中即可:) @star18bit 非常感谢您分享这个很棒的图书馆。它的作用就像魅力:) @Umar 你怎么知道,它已被弃用? 这个在 android 6.0 上崩溃【参考方案2】:

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

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_
            android:layout_ />

【讨论】:

它给了我一个错误android.widget.ImageView cannot be cast to pl.company.project.TouchImageView @PolGraphic 你能告诉我你是如何使用 TouchImageView 的吗? 有gradle的用法吗? @Choletski - 我没听懂你。你的意思是可以使用gradle吗?你只需要添加一个java类。就是这样。对于相同的 gradle 将是不必要的。 这个库仍然有效【参考方案3】:

我希望你做得很好。当他们想在你的应用程序中添加新功能时,通常会发生这种情况,然后通常他们都会搜索不是好的策略的库,因为你不知道其中有什么样的代码图书馆。所以我总是喜欢派生库并在我的应用程序代码中添加有用的类和方法。

所以当我遇到同样的问题时,我做了很多研发工作,然后我找到了一个能够放大、缩小和 pinIn 和 out 的类。所以你可以看到那个类here.。

正如我之前所说,它是一个单一的类。所以你可以把这个类放在你的项目中的任何地方,比如 utils 文件夹。然后把下面的行放到你的 XML 文件中,比如:

<your_packege_name.TouchImageView
        android:id="@+id/frag_imageview"
        android:layout_
        android:layout_
        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 就是这样。 享受我们的代码:)

【讨论】:

这对我来说是最好的解决方案。谢谢!【参考方案4】:

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

PhotoViewAttacher pAttacher;
pAttacher = new PhotoViewAttacher(Your_Image_View);
pAttacher.update();

在 build.gradle 中添加下面一行:-

compile 'com.commit451:PhotoView:1.2.4'

【讨论】:

【参考方案5】:

这是一个很好的例子,说明如何在触摸图像视图时实现缩放效果

Zoom effect on imageview

编辑:

还有一个很棒的。

Pinch to zoom tutorial

【讨论】:

您可以通过此链接使用 zoomageView 获取图像放大和缩小:- ***.com/a/58074642/11613683【参考方案6】:

这实际上是 Android 中图像缩放和平移的最佳示例,

http://blog.sephiroth.it/2011/04/04/imageview-zoom-and-scroll/

【讨论】:

其实我也在使用相同的代码,但问题是我必须检测双击两次,第一件事是放大你点击的图像,第二个恢复图像。我不知道如何实现第一件事。你能帮帮我吗?【参考方案7】:

下面是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;
            
        
    

【讨论】:

如何在图像视图上应用这个?我的意思是我正在以编程方式添加图像视图。 我更喜欢使用 android api 的简单实现,而不是像其他人一样使用外部库。但是,您的答案将通过拖动缩放图像的逻辑来完成。 正确缩放并不是那么简单,因为缩放应该围绕指针(手指)之间的点进行,并且添加柔和的动画也不是那么容易,我认为拥有它非常好。如果这不是您的应用程序的核心逻辑,那么利用外部解决方案可能是个好主意。【参考方案8】:

我更喜欢图书馆davemorrissey/subsampling-scale-image-view 结束 chrisbanes/PhotoView (star18bit的回答)

两个都是活跃的项目(在 2015 年都有一些提交) 两者在 PlayStore 上都有演示 subsampling-scale-image-view 支持大图像(1080p 以上),不会由于子采样导致内存异常,which PhotoView doesn't support subsampling-scale-image-view 似乎有更大的 API 和更好的文档

如果您想在 Eclipse/ADT 中使用 subsampling-scale-image-view,请参阅 How to convert AAR to JAR

【讨论】:

【参考方案9】:

您可以在相关问题中查看答案。 https://***.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_
   android:layout_>

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

【讨论】:

这是我之前针对这个问题发布的帖子***.com/questions/6578320/…

如何在android中实现自定义可折叠工具栏?

】如何在android中实现自定义可折叠工具栏?【英文标题】:HowtoimplementCustomCollapsableToolbarinandroid?【发布时间】:2015-11-2212:08:36【问题描述】:使用thistutorial实现灵活空间模式(带有折叠工具栏的模式)。我正在尝试实现与Lollipop... 查看详情

如何实现在动态布局中添加更多视图在android中实现滚动视图

】如何实现在动态布局中添加更多视图在android中实现滚动视图【英文标题】:howcanimplementedaddingmoreviewsindynamiclayoutimplementingscrollviewinandroid【发布时间】:2011-04-0816:29:45【问题描述】:我正在实现自定义线性布局,在此添加更多... 查看详情

如何在android中实现这种折叠效果?

】如何在android中实现这种折叠效果?【英文标题】:Howtoachievethisfoldingeffectinandroid?【发布时间】:2012-09-1212:24:41【问题描述】:这是在ios上的效果像纸折叠的效果适用于iOS的PaperFold:https://github.com/honcheng/PaperFold-for-iOS【问题讨... 查看详情

如何通过正确的视图 z 顺序在 android 中实现这个基本布局

】如何通过正确的视图z顺序在android中实现这个基本布局【英文标题】:HowcanIachievethisbasiclayoutinandroidwiththeproperz-orderingofviews【发布时间】:2010-09-1411:20:36【问题描述】:如何在Android中实现如下布局?我想要的是让3个蓝色框在他... 查看详情

如何在 OpenGL 中实现绘画(支持图层)?

】如何在OpenGL中实现绘画(支持图层)?【英文标题】:Howtoimplementpainting(withlayersupport)inOpenGL?【发布时间】:2011-07-2010:53:36【问题描述】:情况我正在实现一个高度字段编辑器,有两个视图。主视图以3D显示高度字段,启用轨迹... 查看详情

如何在 iCarousel 视图中单击缩放图像?

】如何在iCarousel视图中单击缩放图像?【英文标题】:HowtoZoomImageonsingletapinaniCarouselView?【发布时间】:2016-05-3110:53:43【问题描述】:我正在努力通过单击放大图像,但还没有成功。我有一个带有6张图像的轮播视图,效果很好,... 查看详情

如何在android中实现时间线范围滑块

】如何在android中实现时间线范围滑块【英文标题】:Howtoimplementtimelinerangesliderinandroid【发布时间】:2022-01-2108:19:19【问题描述】:我想要一个带有水平滚动视图的时间轴视图(ViewPager示例)。我会有1970年到2000年的页面。我可以... 查看详情

如何在 MATLAB 中实现鱼眼镜头效果(桶形变换)?

】如何在MATLAB中实现鱼眼镜头效果(桶形变换)?【英文标题】:HowcanIimplementafisheyelenseffect(barreltransformation)inMATLAB?【发布时间】:2010-04-0703:37:57【问题描述】:如何实现该图像中所示的鱼眼镜头效果:大家可以试试谷歌的logo:... 查看详情

在simulink中实现图像的读取和缩放操作(代码片段)

目录一、理论基础二、核心程序三、仿真测试结果作者ID:fpga和matlabCSDN主页:https://blog.csdn.net/ccsss22?type=blog擅长技术:1.无线基带,无线图传,编解码2.机器视觉,图像处理,三维重建3.人工智能,深度学习4.智能控制,智... 查看详情

如何在 android 中实现 Drag Distortion Image 过滤器?

】如何在android中实现DragDistortionImage过滤器?【英文标题】:HowtoimplementDragDistortionImagefilterinandroid?【发布时间】:2017-04-0713:08:09【问题描述】:我正在开发自定义图像过滤器项目。我遇到了一项具有挑战性的任务,我应该在其中... 查看详情

如何在 nativescript angular 中实现图像缓存

】如何在nativescriptangular中实现图像缓存【英文标题】:Howtoimplementimagecachinginnativescriptangular【发布时间】:2020-08-0814:51:03【问题描述】:我正在使用Angular实现Nativescript应用程序,并且想要进行图像缓存。Nativescript文档仅显示如... 查看详情

如何在自定义相机中实现“捏放大”

】如何在自定义相机中实现“捏放大”【英文标题】:Howtoimplement"pinchtozoom"incustomcamera【发布时间】:2016-02-0620:42:00【问题描述】:我有一个自定义的照片/摄像机(想想Snapchat),它带有一个捏识别器来放大/缩小。根据... 查看详情

如何在Android listview中实现分页

】如何在Androidlistview中实现分页【英文标题】:HowtoimplementpaginationinAndroidlistview【发布时间】:2013-05-1517:28:04【问题描述】:我正在为Android应用程序工作,我需要在其中显示带有项目的列表视图。但是列表视图中要显示更多元素... 查看详情

如何在Android View中实现这种布局配置

】如何在AndroidView中实现这种布局配置【英文标题】:HowtoachievethislayoutconfigurationinAndroidView【发布时间】:2021-12-2204:11:34【问题描述】:我当前的Android应用程序需要如下复杂布局。这是完成的视图------------------------------------------... 查看详情

如何在android中实现下拉刷新?

】如何在android中实现下拉刷新?【英文标题】:Howtoimplementpulldownrefreshinandroid?【发布时间】:2014-01-2919:37:02【问题描述】:目前我正在研究一个片段,它只是一个带有框架布局的webview,问题是,我想做一些类似下拉刷新的事情... 查看详情

如何在android中实现全屏,去掉标题栏效果

参考技术Aandroid全屏的效果如下图,整个应用占据手机屏幕(状态栏看不到)要实现全屏效果,可以配置activity的主题样式为theme.notitlebar.fullscreen也可以在activity的oncreate方法中加入下面代码(注意要在setcontentview之前)this.requestwi... 查看详情

如何在javafx中实现双击缩放? [复制]

】如何在javafx中实现双击缩放?[复制]【英文标题】:HowtoimplementzoomondoubleClickinjavafx?[duplicate]【发布时间】:2016-05-2203:54:44【问题描述】:如何实现dbl点击javafx?我有一个场景(有很多组件),我想让它能够拖动以及双击放大。... 查看详情

如何使用句柄在android中缩放视图?

】如何使用句柄在android中缩放视图?【英文标题】:Howtoscaleaviewinandroidusingahandle?【发布时间】:2014-05-3007:21:56【问题描述】:我正在尝试实现一个句柄来缩放android中的视图。我希望能够只用一根手指调整图像大小,而不是使用... 查看详情