android 长按缩放拖动_GitHub - yongjianx/ScaleImageView: android图片缩放库,支持单击、双击、长按、拖拽、多点触控缩放...

ScaleImageView

v1.1

android图片缩放库,支持单击、双击、长按、拖拽、多点触控缩放

基于-PhotoView实现,并在PhotoView的基础上做了改进,比如允许图片偏离x方向边界,手指抬起时回弹。

为方便大家学习,我仓库上的PhotoView源码我作了详细注释.

使用方法:

将以下内容添加到根目录下的build.gradle(注意:不是module:app下的build.gradle)

allprojects {

repositories {

maven { url "https://jitpack.io" }

}

}

然后将库依赖添加到module:app目录下的build.gradle

dependencies {

implementation 'com.github.yongjianx:ScaleImageView:v1.0'

}

使用示例

单张图片使用示例

定义xml文件

android:id="@+id/imageView"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@color/colorBackground"/>

在activity中

imageView = (ScaleImageView) findViewById(R.id.imageView);

try {

getBitmapForImgResourse(this, R.drawable.image, imageView);

}

catch (IOException e){

e.printStackTrace();

}

getBitmapForImgResourse(this, R.drawable.image, imageView);加载大图片时防止OOM

也可以使用图片加载框架--Glide

ViewPager多张图片浏览

有一些ViewGroups(利用onInterceptTouchEvent())的ViewGroups)在将ScaleImageView放入其中时可能会抛出IllegalArgumentException异常,比如ViewPager。为了防止此异常,请使用自定义ViewPager捕获异常.

public class MyViewPager extends ViewPager {

public MyViewPager(Context context) {

super(context);

}

public MyViewPager(Context context, AttributeSet attrs) {

super(context, attrs);

}

@Override

public boolean onInterceptTouchEvent(MotionEvent ev) {

try {

return super.onInterceptTouchEvent(ev);

} catch (IllegalArgumentException e) {

e.printStackTrace();

return false;

}

}

}

然后, 在PagerAdapter的instantiateItem()方法中添加以下内容

ScaleImageView view = new ScaleImageView(container.getContext());

view.setIsViewPager(true);//标识ViewGroup为ViewPager,处理滑动冲突

最后,在activity中设置ViewPager的适配器

viewPager = (MyViewPager) findViewById(R.id.viewPager);

viewPager.setAdapter(new ViewPagerAdapter());

具体可参考app/src/main/java/com/example/skyworthclub/imagescale/ViewPagerActivity.java的实现.

关于API

//设置初始图片的尺寸,不调用此方法时初始值由初始加载图片时计算出来

public void setInitScale(float initScale){

attacher.setInitScale(initScale);

}

public void setMidScale(float midScale){

attacher.setMidScale(midScale);

}

//设置缩放图片的最大尺寸,默认为3*初始图片的尺寸

public void setMaxScale(float maxScale){

attacher.setMaxScale(maxScale);

}

//设置图片的多点触控时的最小尺寸,默认为0.5*初始图片的尺寸

public void setMinOverstep(float minOverstep){

attacher.setMinOverstep(minOverstep);

}

//设置图片的多点触控时的最大尺寸,默认为4*初始图片的尺寸

public void setMaxOverstep(float maxOverstep){

attacher.setMaxOverstep(maxOverstep);

}

//设置图片的双击缩放时持续时间

public void setZoomDuration(int duration){

attacher.setZoomDuration(duration);

}

//图片被拖动超出x方向边界,MOTIONEVENT.ACTION_UP事件图片回弹的持续时间

public void setTranslateDuration(int duration){

attacher.setTranslateDuration(duration);

}

//图片长按监听事件

public void setOnLongClickListener(OnLongClickListener listener){

attacher.setOnLongClickListener(listener);

}

//图片点击监听事件

public void setOnClickListener(OnClickListener listener){

attacher.setOnClickListener(listener);

}

//标识ViewGroup为ViewPager,处理滑动冲突

public void setIsViewPager(boolean isViewPager){

attacher.setIsViewPager(isViewPager);

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值