TouchImageView 实现图片的缩放,双击放大缩小,多点触控的功能

首先扯点别的:昨天约人打拳皇,又被一顿海虐,也是艰难。万水千山总是情,虐我轻点行不行?八神用的越来越水了,昨天下午饭都没有胃口了。看样是时候退出拳皇97界了。

进入正题:今天说一个GITHUB上的一个开源的项目TouchImageView,链接地址如下:TouchImageView,今天的博客就照着github上的英文给大家翻译一下(我得为自己的560的四级,460的六级找个说法啊),顺便给大家展示一下demo,让大家看的更直观一点。

  1. TouchImageView功能介绍:TouchImageView继承并涵盖了ImageView的所用功能。另外TouchImageView增加了双指缩放,拖拽,滑动,双击缩放的功能和其他动画效果。我们的目的是使TouchImageView的功能尽可能和那些展示图片的应用程序相似。
  2. 例子:请查看包括以下功能例子的应用示例应用程序

  3. 单个TouchImageView: 单个TouchImageView的基础使用,包括 OnTouchImageViewListener(触摸监听), getScrollPosition()(得到所放的中心位置), getZoomedRect()(得到缩放的矩形), isZoomed()(判断是否所放了),and getCurrentZoom()(得到当前的所放比).的使用。如果大家现在对这几个函数还没有什么概念很正常,坚持一下,继续往下看。
    3.1,先看效果,再解释
    3.2,这是主界面,点击 Single TouchImageView 进入到相应的活动
    这里写图片描述

    3.3Single TouchImageView Activity

    这里写图片描述
    可以进行双击缩放,双指缩放,拖拽的操作,我操做的效果如下(注意。你的操作效果跟我的不一样)
    3.4 操作效果
    这里写图片描述

  4. ViewPager 的例子:多个TouchImageView放在ViewPager 里面,就像是展示图片的画廊app。
    4.1 点击主界面的ViewPager Example进入到相应的界面,效果如下,可以左右滑动测试ViewPager的效果
    这里写图片描述
    4.2左右滑动改变图片
    这里写图片描述

  5. 镜子效果:使用onTouchImageViewListener and setZoom()使两个TouchImageView的展示效果相同。
    5.1 点击主界面的Mirroring Example 进入相应的界面,一张图片的所有手势效果会被同样应用在另外一张图片上,你点击放大上面的一张图片,下面的图片就会跟着放大。
    这里写图片描述

  6. 更换图片的例子
    6.1 点击TouchImageView更换图片,注意图片的缩放状态会被保持。就是说如果当前图片没有缩放点击更换下一张图片也不会缩放,如果当前的图片放大了,点击更换下一张图片也会被放大,看效果

这里写图片描述

这里写图片描述

  1. 更换图片缩放类型的例子:点击图片更换支持的图片的缩放效果(关于缩放效果的文章可以看看这个http://blog.csdn.net/leilifengxingmw/article/details/50787831),行看看更换缩放类型的图片效果,就看两个。
    这里写图片描述

这里写图片描述

以下是关于TouchImageView的一些说明

  1. 限制:TouchImageView不支持手势旋转,另外FIT_START 和FIT_END现在还不支持。
  2. 支持最小API 8.
  3. 使用方式:把TouchImageView.java复制到你的工程里,就可以像ImageView一样使用了,例如
TouchImageView img = (TouchImageView) findViewById(R.id.img);

如果你在xml文件里使用,那你必须使用完整的包名,因为TouchImageView 是一个自定义view。

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

4.API

// 得到当前的缩放比。是和TouchImageView相关的所放比,而和原始的图片没有关系
float getCurrentZoom();

// 得到最大的缩放倍数.
float getMaxZoom();

// 得到最小的缩放倍数.
float getMinZoom();

// 返回可缩放图片的中心点。PointF的坐标在0到1之间,焦点以整个view的左上角的百分比来表示。例如,图片的左上角是(0,0),右下角是(1,1)。
PointF getScrollPosition();

// 返回代表缩放图片的矩形
RectF getZoomedRect();

// 如果图片初始化是没有缩放的状态,返回false,否则返回true;
boolean isZoomed();

// 重新设定缩放级别返回到初始化状态。
void resetZoom();

// 设置最大的缩放级别. 默认值是: 3.
void setMaxZoom(float max);

// 设置最小的缩放级别. 默认值是: 1.
void setMinZoom(float min);

// 设置图片的所放焦点。焦点以整个view的左上角为基准表示为百分比的形式取值为0到1之间。
void setScrollPosition(float focusX, float focusY);

// 设置特定级别的所放比。图片默认是放在整个view的中间
void setZoom(float scale);

// 设置特定级别的所放比。图片的中心点就是所设置的点的位置(focusX, focusY)。focusX和focusY以view的左上角为基准表示为取值0到1的百分比。例如,图片的左上角表示为(0,0),图片的右下角表示为(1,1)。
三个参数分别表示;缩放级别,横纵坐标。
void setZoom(float scale, float focusX, float focusY);

// 设置特定级别的所放比。图片的中心点就是所设置的点的位置(focusX, focusY)。focusX和focusY以view的左上角为基准表示为取值0到1的百分比。例如,图片的左上角表示为(0,0),图片的右下角表示为(1,1)。
四个参数分别表示;缩放级别,横纵坐标,缩放类型。
void setZoom(float scale, float focusX, float focusY, ScaleType scaleType);

// 设置和别的TouchImageView一样的缩放比。包括缩放级别,缩放位置和缩放的类型。
void setZoom(TouchImageView img);
//最后在列一下TouchImageView所支持的缩放类型的取值:
centerCrop,centerInside,fitXY,fitCenter,center。

Using TouchImageView with Glide library

在TouchImageView 结合Glide使用的时候遇到了这样一种情况:使用ViewPager+PagerAdapter 实现图片浏览的时候,在加载网络图片的时候,第一张图片不能正常加载。参考了github上的issure Using TouchImageView with Glide library,解决方法代码如下。

PagerAdapter的方法

 @Override
    public Object instantiateItem(ViewGroup container, int position) {
        View view = LayoutInflater.from(context).inflate(R.layout.item_album_img, container, false);
        final TouchImageView imageView = view.findViewById(R.id.img_main);
        imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (albumClickListener != null) {
                    albumClickListener.onAlbumClick();
                }
            }
        });
        Glide.with(context).asBitmap().load(list.get(position)).into(new SimpleTarget<Bitmap>() {
            @Override
            public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
                imageView.setImageBitmap(resource);
                //调用这个方法即可正常显示,具体原因并不了解
                imageView.setZoom(1);
            }
        });
        container.addView(view);
        return view;
    }

结尾:

实话是说。翻译还是借助了有道词典,学了十几年的英语,都忘的差不多了,就会说一个Hello,Hi了,艰难。写的不好,大家多多包涵。
结尾:我们专业的学安卓的有在上海的。北京的。杭州的。工资有15000的,10000的。但是我们专业学安卓的还有在青岛即墨的。工资2000,就是我,也是艰难啊。还有2,3个月就毕业了,该考虑一下到底何去何从了。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值