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. servlet里的forward和redirect的区别

    forward方式:request.getRequestDispatcher("/somePage.jsp").forwardrequest, response);     red ...

  2. React-Native 基本环境的搭建

    看了一些RN资料,仅仅了解到人们对 RN(以下简称 React_native 框架) 的使用描述以及评价,就觉得RN是一个很不错的框架,值得学习.今天就开始写我的学习记录,也给大家分享一下.下面进入正 ...

  3. 重载和const形参的学习心得

    在C++ primer 5th中,第6章的练习6.39(a)中,关于重载和const形参的学习心得. 练习6.39:说明在下面的每组声明中第二条声明语句是何含义.如果有非法的声明,请指出来. (a)  ...

  4. asp.net mvc5 使用百度ueditor 本编辑器完整示例(下)

    一.百度ueditor 本编辑器 一个最大的优点是快速导入word文档的内容,特别 是导入word文档的图文混排效果. 操作步骤: 1.先打开word文档,Crtl +C复制 ,Ctrl+V粘贴到Ue ...

  5. 评判云服务靠谱程度 -- Coding 安全那些事

    本文依据孙宇聪在 SegmentFault D-Day 北京场的演讲内容整理,并授权首发于“高效运维”公众号.10月11日,SegmentFault 将在上海举办D-Day,围绕 Docker 主题. ...

  6. mysql的权限问题SQLException: access denied for @'localhost' (using password: no)

    遇到了 SQLException: access denied for  @'localhost' (using password: no) 解决办法   grant all privileges o ...

  7. UVa 1001 Say Cheese (Dijkstra)

    题意:给定一个三维空间的一些球和起始位置和结束位置,问你最短要花的时间是多少. 析:建图,所有的位置都建立图,边权就是距离,最小求一次最短路即可. 代码如下: #pragma comment(link ...

  8. 为Docker容器设置静态IP

    此文已由作者袁欢授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 创建docker容器 docker run -it --name=yh -h yh --net=none de ...

  9. E20180513-hm

    letter n. 信; 证书,许可证; 字母,文字; 字面意义; bracket n. 支架,悬臂; 括弧; 类别,等级; [数] 同类项; coefficient  n. 系数; (测定某种质量或 ...

  10. 《Android学习笔记》Android Studio如何去除顶部标题栏教程

    序] 在初步开发Android应用中,我们会遇到一个问题,顶部标题栏的名字是项目名字(app名字)并且不可编辑.非常的不方便,那么我们有什么办法把他去掉呢? [相关文章] [开发工具] Android ...