我是靠谱客的博主 壮观短靴,这篇文章主要介绍安卓图片(ImageView):展示大图、双击放大、触摸放大缩小、滑动切换、长按保存等安卓图片(ImageView):展示大图、双击放大、触摸放大缩小、滑动切换、长按保存等,现在分享给大家,希望可以做个参考。

安卓图片(ImageView):展示大图、双击放大、触摸放大缩小、滑动切换、长按保存等

背景:由于项目中需要做一个图片展示功能,大概就是在一个页面中有一个listview或者recyclerview的布局,然后item中有图文混排,点击图片后能看大图,并且能触摸放大,双击放大,触摸缩小,多张图片的话还可以滑动切换,长按图片还可以保存到本地等操作,然后就开始按着需求设计功能,由于网上也有很多类似demo,简直满坑满谷,所以就不在介绍各种原理及实现方法,功能很简单,代码也很easy,主要就是依赖photoView开源代码完成,各位看官就将就一下吧:
- 1.怎样展示大图
- 2.自定义imageview
- 3.多张图片滑动
- 4.长按保存,取消


复制代码
1
2
3
4
5
6
1.首先点击图片后要展示当前所点击的图片大图,用什么承载这张图片呢,这里我用的是dialog,下面po出代码,注释很详细,放心阅读: /** * 点击图片后,调用该展示大图方法 * @param mPosition */
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public void showPictureDialog(final int mPosition) { //创建dialog mDialog = new Dialog(this, R.style.PictureDialog); final Window window1 = mDialog.getWindow() ; WindowManager m = getWindowManager(); Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用 WindowManager.LayoutParams p = window1.getAttributes(); // 获取对话框当前的参数值 p.height = (int) (d.getHeight() * 1.0); // 改变的是dialog框在屏幕中的位置而不是大小 p.width = (int) (d.getWidth() * 1.0); // 宽度设置为屏幕 window1.setAttributes(p); View inflate = View.inflate(QuestionDetailsActivity.this, R.layout.picture_dialog, null);//该layout在后面po出 int screenWidth = getResources().getDisplayMetrics().widthPixels; ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(screenWidth, ViewGroup.LayoutParams.MATCH_PARENT); mDialog.setContentView(inflate, layoutParams); pager = (ViewPagerFixed) inflate.findViewById(R.id.gallery01); pager.setOnPageChangeListener(pageChangeListener); PicturePageAdapter adapter = new PicturePageAdapter((ArrayList<String>) mListPicPath, this); pager.setAdapter(adapter); pager.setPageMargin(0); pager.setCurrentItem(mPosition); window1.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); mDialog.setOnKeyListener(new DialogOnKeyListener()); mDialog.show(); adapter.setOnPictureClickListener(new PicturePageAdapter.OnPictureClickListener() { @Override public void OnClick() { window1.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); mDialog.dismiss(); } }); //长按图片保存 adapter.setOnPictureLongClickListener(new PicturePageAdapter.OnPictureLongClickListener() { @Override public void OnLongClick() { //展示保存取消dialog showPicDialog(); } }); }
复制代码
1
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//展示保存取消dialog private void showPicDialog() { homeWorkDialog = new SavePicDialog(QuestionDetailsActivity.this); homeWorkDialog.setOnClickListener(new SavePicDialog.onClickListener() { @Override public void onConfirm() { //启动图片下载线程 if (pager != null){ onDownLoad(mListPicPath.get(pager.getCurrentItem())); } Toast.makeText(QuestionDetailsActivity.this,"保存成功!",Toast.LENGTH_SHORT).show(); homeWorkDialog.dismiss(); } @Override public void onCancle() { homeWorkDialog.dismiss(); } }); Window dialogWindow = homeWorkDialog.getWindow(); dialogWindow.setGravity( Gravity.BOTTOM); WindowManager.LayoutParams lp = dialogWindow.getAttributes(); lp.y = 0; dialogWindow.setAttributes(lp); homeWorkDialog.show(); }
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//上面style <style name="PictureDialog" parent="android:style/Theme.Translucent.NoTitleBar.Fullscreen"> <item name="android:background">#00000000</item> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowNoTitle">true</item> <item name="android:windowIsFloating">true</item> </style> //上面picture_dialog布局 <?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"> <com.XXX.ViewPagerFixed android:id="@+id/gallery01" android:layout_width="match_parent" android:layout_height="match_parent"> </com.XXX.ViewPagerFixed> </RelativeLayout>
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/** * Created by ml on 17/6/30. */ public class PicturePageAdapter extends PagerAdapter { private ArrayList<String> mListUrls; private SparseArray<View> mViews = new SparseArray<>(); private Context mContext; private int size; private OnPictureClickListener mOnPictureClickListener; private OnPictureLongClickListener mOnPictureLongClickListener; public PicturePageAdapter(ArrayList<String> listUrls, Context context) { mContext = context; mListUrls = listUrls; size = mListUrls == null ? 0 : mListUrls.size(); } public SparseArray<View> getData(){ return this.mViews; } public int getCount() { return size; } public int getItemPosition(Object object) { return POSITION_NONE; } public void destroyItem(ViewGroup arg0, int arg1, Object arg2) { arg0.removeView(mViews.get(arg1)); } public void finishUpdate(View arg0) { } public Object instantiateItem(ViewGroup arg0, int arg1) { View view = mViews.get(arg1); if(view == null){ //引入photoView PhotoView img = new PhotoView(mContext); try { img.setBackgroundColor(0xff000000); //Glide需要自己去引入了 Glide .with(mContext) .load(mListUrls.get(arg1)) .into(img); img.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); img.setOnPhotoTapListener(new PhotoViewAttacher.OnPhotoTapListener() { @Override public void onPhotoTap(View view, float x, float y) { if (mOnPictureClickListener != null) { mOnPictureClickListener.OnClick(); } } }); //设置长按图片监听 img.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { if (mOnPictureLongClickListener != null) { mOnPictureLongClickListener.OnLongClick(); } return false; } }); mViews.put(arg1,img); view = img; } catch (Exception e) { e.printStackTrace(); } } ((ViewPagerFixed) arg0).addView(view); return view; } public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } /** * 图片监听接口 */ public interface OnPictureClickListener{ void OnClick(); } /** * 设置图片监听 * @param onPictureClickListener */ public void setOnPictureClickListener(OnPictureClickListener onPictureClickListener){ mOnPictureClickListener = onPictureClickListener; } /** * 长按图片监听接口 */ public interface OnPictureLongClickListener{ void OnLongClick(); } /** * 设置长按图片监听 * @param onPictureLongClickListener */ public void setOnPictureLongClickListener(OnPictureLongClickListener onPictureLongClickListener){ mOnPictureLongClickListener = onPictureLongClickListener; } }
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//自定义viewpager类 public class ViewPagerFixed extends android.support.v4.view.ViewPager { public ViewPagerFixed(Context context) {super(context);} public ViewPagerFixed(Context context, AttributeSet attrs) {super(context, attrs);} @Override public boolean onTouchEvent(MotionEvent ev) { try { return super.onTouchEvent(ev); } catch (IllegalArgumentException ex) { ex.printStackTrace(); } return false; } @Override public boolean onInterceptTouchEvent(MotionEvent ev) { try { return super.onInterceptTouchEvent(ev); } catch (IllegalArgumentException ex) { ex.printStackTrace(); } return false; } } 希望大家静下心来整理,也给自己增加理解,或者发现不好的地方,指出来,咱们一起进步,完善

好了,这样就结束了,谢谢大家浏览使用,也欢迎提出问题,一起进步!

最后

以上就是壮观短靴最近收集整理的关于安卓图片(ImageView):展示大图、双击放大、触摸放大缩小、滑动切换、长按保存等安卓图片(ImageView):展示大图、双击放大、触摸放大缩小、滑动切换、长按保存等的全部内容,更多相关安卓图片(ImageView)内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部