xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black"> <android.support.v4.view.ViewPager
android:id="@+id/picViewPager"
android:layout_width="match_parent"
android:layout_height="match_parent" /> </RelativeLayout>

  

java类:

public class ActShowBigPicture extends BaseActivity implements ZoomImageView.onImageTouchedListener {
/** 图片url集合 intent key */
public static final String INTENT_PICURLS = "picUrls";
/** 显示下标 intent key */
public static final String INTENT_SHOW_POS = "showPos"; private List<String> picUrls; // 图片URL集合
private int showPos; // 显示下标
private int oldPosition = 0; private ViewPager picViewPager; private List<View> zoomImageViewContainers;
private List<ZoomImageView> zoomImageViews;
private DisplayImageOptions mPicOptions; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.act_show_big_picture); mBar.setVisibility(View.GONE); dismissLoadingView(); // 获取传递过来的Intent对象
Intent intent = getIntent();
picUrls = intent.getStringArrayListExtra(INTENT_PICURLS);
showPos = intent.getIntExtra(INTENT_SHOW_POS, 0); if (null == picUrls || picUrls.size() <= 0) {
finish();
return ;
} mPicOptions = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.def_banner_img)
.showImageOnFail(R.drawable.def_banner_img)
.showImageForEmptyUri(R.drawable.def_banner_img)
.cacheOnDisk(true)
.cacheInMemory(false)
.displayer(new FadeInBitmapDisplayer(200, true, true, false)) // 显示动画
.build(); // 初始化View
picViewPager = (ViewPager)findViewById(R.id.picViewPager); // 设置事件
// findViewById(R.id.layout_back).setOnClickListener(this); zoomImageViews = new ArrayList<>();
zoomImageViewContainers = new ArrayList<>();
for (int i=0; i<picUrls.size(); i++) {
View zoomImageViewContainer = getLayoutInflater().inflate(R.layout.item_big_picture, null);
ZoomImageView zommImageView = (ZoomImageView)zoomImageViewContainer.findViewById(R.id.zommImageView);
zommImageView.setOnImageTouchedListener(this);
zommImageView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
ZoomImageView curZoomImageView = (ZoomImageView)v;
Bitmap tempImageBitmap = curZoomImageView.getImageBitmap();
if (null == tempImageBitmap) {
return false;
} int curW = tempImageBitmap.getWidth();
int curH = tempImageBitmap.getWidth(); Matrix m = curZoomImageView.getImageViewMatrix();
RectF rect = new RectF(0, 0, curW, curH);
m.mapRect(rect);
// 图片超出屏幕范围后移动
// Log.i("wg", "rect.right= " + rect.right + " _ rect.left = " + rect.left);
if (!(rect.right > curZoomImageView.getWidth() + 0.1 && rect.left < -0.1)) {
picViewPager.requestDisallowInterceptTouchEvent(false);
} else {
picViewPager.requestDisallowInterceptTouchEvent(true);
} return false;
}
}); zoomImageViewContainers.add(zoomImageViewContainer);
zoomImageViews.add(zommImageView);
} // 设置图片间的间距
// final float scale = getResources().getDisplayMetrics().density;
// int pagerMarginPixels = (int) (PAGER_MARGIN_DP * scale + 0.5f);
// picViewPager.setPageMargin(pagerMarginPixels);
// picViewPager.setPageMarginDrawable(new ColorDrawable(Color.BLACK));
// 设置适配器
picViewPager.setAdapter(new PagerAdapter() {
@Override
public void destroyItem(View arg0, int arg1, Object arg2) {
((ViewPager)arg0).removeView(zoomImageViewContainers.get(arg1));
} @Override
public int getCount() {
return zoomImageViewContainers.size();
} @Override
public Object instantiateItem(View arg0, int arg1) {
View v = zoomImageViewContainers.get(arg1);
((ViewPager) arg0).addView(v, 0);
return v;
} @Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == (arg1);
} @Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {
} @Override
public Parcelable saveState() {
return null;
} @Override
public void startUpdate(View arg0) {
}
});
picViewPager.setOnPageChangeListener(new SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// 恢复原图最小化
ZoomImageView oldImageViewTouch = zoomImageViews.get(oldPosition);
if (null != oldImageViewTouch && null != oldImageViewTouch.getImageBitmap() && !oldImageViewTouch.getImageBitmap().isRecycled()) {
oldImageViewTouch.zoomTo(oldImageViewTouch.zoomDefault());
} ZoomImageView curImageViewTouch = zoomImageViews.get(position);
Bitmap curImageBitmap = curImageViewTouch.getImageBitmap();
// 当图片Bitmap为空或者已经被回收的时候才去加载
if (null == curImageBitmap || curImageBitmap.isRecycled()) {
loadImageViewBitmap(picUrls.get(position), curImageViewTouch, null);
} oldPosition = position;
}
}); picViewPager.setCurrentItem(showPos, false);
if (showPos == 0) {
// 显示第一张图片
// 显示Loading
ImageLoader.getInstance().displayImage(picUrls.get(0), zoomImageViews.get(0), mPicOptions, new SimpleImageLoadingListener(){
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
super.onLoadingComplete(imageUri, view, loadedImage); // ((FrameLayout)zoomImageViews.get(0).getParent()).findViewById(R.id.pagerLoad).setVisibility(View.GONE);
} @Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
super.onLoadingFailed(imageUri, view, failReason); // 隐藏Loading
// ((FrameLayout)zoomImageViews.get(0).getParent()).findViewById(R.id.pagerLoad).setVisibility(View.GONE); // 显示loading错误View
// ((FrameLayout)zoomImageViews.get(0).getParent()).findViewById(R.id.loaddataErrRL).setVisibility(View.VISIBLE);
}
});
}
} private void loadImageViewBitmap(final String picUrl, final ImageView iv, final View parentView) {
if (null != parentView) {
// 显示Loading
// parentView.findViewById(R.id.pagerLoad).setVisibility(View.VISIBLE);
} ImageLoader.getInstance().displayImage(picUrl, iv, mPicOptions, new SimpleImageLoadingListener() {
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
super.onLoadingFailed(imageUri, view, failReason); // 获取父View
// final FrameLayout parentView = (FrameLayout)iv.getParent(); // 隐藏Loading
// parentView.findViewById(R.id.pagerLoad).setVisibility(View.GONE); // 显示loading错误View
// parentView.findViewById(R.id.loaddataErrRL).setVisibility(View.VISIBLE);
} @Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
super.onLoadingComplete(imageUri, view, loadedImage); // 获取父View
// final FrameLayout parentView = (FrameLayout)iv.getParent(); if (null == loadedImage) {
// 显示loading错误View
// parentView.findViewById(R.id.loaddataErrRL).setVisibility(View.VISIBLE);
} // 隐藏Loading
// parentView.findViewById(R.id.pagerLoad).setVisibility(View.GONE); }
});
} @Override
public void onImageTouched() {
finish();
} public static void showPic(Context context, String path) {
if (TextUtils.isEmpty(path)) return ; ArrayList<String> picurls = new ArrayList<>();
picurls.add(path);
showPic(context, picurls);
} public static void showPic(Context context, ArrayList<String> picurls) {
showPic(context, picurls, 0);
} public static void showPic(Context context, ArrayList<String> picurls, int postion) {
if (null == picurls || picurls.size() == 0) return ; Intent intent = new Intent(context, ActShowBigPicture.class);
intent.putStringArrayListExtra(ActShowBigPicture.INTENT_PICURLS, picurls);
if (postion != 0) {
intent.putExtra(INTENT_SHOW_POS, postion);
}
context.startActivity(intent);
} @Override
protected boolean isNotSwipe() {
return true;
}
}

  

ZoomImageView类参考前一篇随笔

显示大图Activity(支持手势放大)的更多相关文章

  1. 手把手教你打造ImageView支持手势放大缩小

    写在前面 最近有了新的任务,学习的时间比以前少了不少,Java回炉的文估计是得缓缓了,不过每周一篇尽量保质保量.最近感觉我文写的有点不好,因为我写东西除非必要,不然概念性的东西我基本上都是一笔带过…… ...

  2. Android 高仿微信朋友圈动态, 支持双击手势放大并滑动查看图片。

    转载请注明出处:http://blog.csdn.net/sk719887916/article/details/40348873 作者skay: 最近参与了开发一款旅行APP,其中包含实时聊天和动态 ...

  3. 【读书笔记《Bootstrap 实战》】3.优化站点资源、完成响应式图片、让传送带支持手势

    A.优化站点资源 速度很重要.用户很关心.我们的站点必须加载够快,否则用户就会走人.SEO 也很重要.我们的站点必须加载够快,否者搜索排名就会下降. 明白了这样,我们就来清点一下 [Bootstrap ...

  4. 【Bootstrap】3.优化站点资源、完成响应式图片、让传送带支持手势

    A.优化站点资源 速度很重要.用户很关心.我们的站点必须加载够快,否则用户就会走人.SEO 也很重要.我们的站点必须加载够快,否者搜索排名就会下降. 明白了这样,我们就来清点一下 [Bootstrap ...

  5. swiper默认显示三个,中间放大且显示全部图片两边显示部分图片的实现方法

    本页面内容最后的红色部分有惊喜哦! 最近在做一个活动页面,要求触摸切换图片时,默认在可视区域中显示三张图片,其中中间的一张图片比其他两张都大且全部显示,而其他两张图片只显示部分即可,于是就想到了swi ...

  6. WPF图片浏览器(显示大图、小图等)

    原文:WPF图片浏览器(显示大图.小图等) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/wangshubo1989/article/details ...

  7. XML文件解析并利用SimpleAdapter将解析结果显示在Activity中

    首先创建一个实体类 Mp3Info用来存储解析的XML文件中的内容: public class Mp3Info implements Serializable{ private static fina ...

  8. jQuery鼠标经过显示大图

    效果:http://keleyi.com/keleyi/phtml/image/8.htm 以下是完整代码: <!DOCTYPE html> <html lang="en& ...

  9. DIV横排/竖排滚动(white-space/::-webkit-scrollbar的使用技巧以及display: inline-block的选择)支持手势

    参考微信的京东客户端http://wqs.jd.com/,实现DIV的横排滚动,且支持手势,并且不会出现滚动跳,效果如下: 但是观察其div结构是没有使用任何JS去实现. 一.实现上DIV的横排 观察 ...

随机推荐

  1. Ubuntu 安装mysql和 简单命令操作

    ubuntu上安装mysql非常简单只需要几条命令就可以完成. 1. sudo apt-get install mysql-server   2. apt-get isntall mysql-clie ...

  2. codevs-1204

    1204 寻找子串位置 题目描述 Description 给出字符串a和字符串b,保证b是a的一个子串,请你输出b在a中第一次出现的位置. 输入描述 Input Description 仅一行包含两个 ...

  3. vector 大小

    vector定义以后就最好确定大小resize(),否则在vector析构时可能出现 "double free or corruption"这样的错误

  4. Flutter实战视频-移动电商-05.Dio基础_引入和简单的Get请求

    05.Dio基础_引入和简单的Get请求 博客地址: https://jspang.com/post/FlutterShop.html#toc-4c7 第三方的http请求库叫做Dio https:/ ...

  5. 深入理解Java中方法的参数传递机制

    形参和实参 我们知道,在Java中定义方法时,是可以定义参数的,比如: public static void main(String[] args){ } 这里的args就是一个字符串数组类型的参数. ...

  6. 洛谷 - P2278 - 操作系统 - 模拟

    https://www.luogu.org/problemnew/show/P2278 题目没有说同时到达的优先级最大的应该处理谁. 讲道理就是处理优先级最大的. #include<bits/s ...

  7. 基于thinkphp5的Excel上传

    涉及知识点: thinkphp5.0: excel上传: mysql建立新表(基本的create语句): mysql ignore(避免重复插入): 主要功能: 通过在视图中上传excel文件,在my ...

  8. Unity学习(六)5.x依赖打包

    http://blog.sina.com.cn/s/blog_89d90b7c0102w2ox.html unity5已经封装好了接口,所以依赖打包并没有那么神秘和复杂了. 打包: 1.定义好资源的a ...

  9. ubuntu 14 安装XML::Simple 模块

    最近需要用到perl 来解析xml 文件,从网上搜索了一下,大部分都建议使用XML::Simple 模块来解析,这里记录一下安装过程 方法一: 直接使用CPAN 来安装模块 $ perl -MCPAN ...

  10. [Noip2012普及组]摆花

    Description 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共 m 盆.通过调查顾客的喜好,小明列出了顾客最喜欢的 n 种花,从 1 到 n 标号.为了在门口展出更多种花,规定 ...