显示大图Activity(支持手势放大)
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(支持手势放大)的更多相关文章
- 手把手教你打造ImageView支持手势放大缩小
写在前面 最近有了新的任务,学习的时间比以前少了不少,Java回炉的文估计是得缓缓了,不过每周一篇尽量保质保量.最近感觉我文写的有点不好,因为我写东西除非必要,不然概念性的东西我基本上都是一笔带过…… ...
- Android 高仿微信朋友圈动态, 支持双击手势放大并滑动查看图片。
转载请注明出处:http://blog.csdn.net/sk719887916/article/details/40348873 作者skay: 最近参与了开发一款旅行APP,其中包含实时聊天和动态 ...
- 【读书笔记《Bootstrap 实战》】3.优化站点资源、完成响应式图片、让传送带支持手势
A.优化站点资源 速度很重要.用户很关心.我们的站点必须加载够快,否则用户就会走人.SEO 也很重要.我们的站点必须加载够快,否者搜索排名就会下降. 明白了这样,我们就来清点一下 [Bootstrap ...
- 【Bootstrap】3.优化站点资源、完成响应式图片、让传送带支持手势
A.优化站点资源 速度很重要.用户很关心.我们的站点必须加载够快,否则用户就会走人.SEO 也很重要.我们的站点必须加载够快,否者搜索排名就会下降. 明白了这样,我们就来清点一下 [Bootstrap ...
- swiper默认显示三个,中间放大且显示全部图片两边显示部分图片的实现方法
本页面内容最后的红色部分有惊喜哦! 最近在做一个活动页面,要求触摸切换图片时,默认在可视区域中显示三张图片,其中中间的一张图片比其他两张都大且全部显示,而其他两张图片只显示部分即可,于是就想到了swi ...
- WPF图片浏览器(显示大图、小图等)
原文:WPF图片浏览器(显示大图.小图等) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/wangshubo1989/article/details ...
- XML文件解析并利用SimpleAdapter将解析结果显示在Activity中
首先创建一个实体类 Mp3Info用来存储解析的XML文件中的内容: public class Mp3Info implements Serializable{ private static fina ...
- jQuery鼠标经过显示大图
效果:http://keleyi.com/keleyi/phtml/image/8.htm 以下是完整代码: <!DOCTYPE html> <html lang="en& ...
- DIV横排/竖排滚动(white-space/::-webkit-scrollbar的使用技巧以及display: inline-block的选择)支持手势
参考微信的京东客户端http://wqs.jd.com/,实现DIV的横排滚动,且支持手势,并且不会出现滚动跳,效果如下: 但是观察其div结构是没有使用任何JS去实现. 一.实现上DIV的横排 观察 ...
随机推荐
- netty学习2
一.Netty分层设计 Netty 采用了比较典型的三层网络架构进行设计,逻辑架构图如下所示: #第一层,Reactor 通信调度层,它由一系列辅助类完成,包括 Reactor 线程 NioEvent ...
- Azure Key Vault (1) 入门
<Windows Azure Platform 系列文章目录> 为什么要使用Azure Key Vault? 我们假设在微软云Azure上有1个场景,在Windows VM里面有1个.NE ...
- JavaScript-Tool:validate.js-un
ylbtech-JavaScript-Tool:validate.js 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 0. http://validatejs. ...
- firewalld·使用方法示例
firewalld使用方法示例 # systemctl start firewalld # 启动, # systemctl enable firewalld # 开机启动 # systemctl st ...
- [转]windows10 1703 鼠标右键打开命令提示符cmd
https://answers.microsoft.com/zh-hans/windows/forum/windows_10-performance/windows10-1703/8bdfdfea-4 ...
- Httpclient入门代码
/** * Project Name:httpClient * File Name:Test.java * Package Name:httpClient * Date:2017年11月9日上午8:3 ...
- Tomcat之the jre_home environment variable is not defined correctly this environment variable is need
参考https://blog.csdn.net/qq_30507287/article/details/53981851 今天在服务器的tomcat上部署.war文件,双击startup闪退,然后在t ...
- Structure Streaming和spark streaming原生API访问HDFS文件数据对比
此文已由作者岳猛授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. Structure Stream访问方式 code examples import org.apache.sp ...
- HDU1597【二分瞎搞】
题意: 求第n个数: 思路: 可以看到一种序列: 1 12 123 1234 12345 123456 1234567 12345678 123456789 1234567891 1234567891 ...
- MongoDb 安装服务 以及 安全配置
安装MongoDb 的服务 命令如下: (cmd以管理员运行) mongod –logpath "D:\Program Files\mongodb\data\logs.txt" – ...