ImageView+ViewPager+PhotoView实现朋友圈图片点击全屏查看支持放大缩小
来源:互联网 发布:手机防沉溺软件 编辑:程序博客网 时间:2024/04/30 08:59
项目DEMO地址:http://download.csdn.net/detail/wxk105/9562369
效果图
点击滑动效果图
点击放大效果图
mainActivity
项目简单只在必要处做声明,完整demo见结尾链接,看不懂请加Q164454216,验证:博客
public class MainActivity extends AppCompatActivity { private List<ImageInfo> list;//用于接收后台图片地址集合 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initData();//填充数据 initView();//初始化控件 } private void initData() { for (int i=0;i<urls.length;i++){ ImageInfo imageInfo=new ImageInfo(urls[i],200,200); list.add(imageInfo); } } private void initView() { GridView gv_pic = (GridView) findViewById(R.id.gv_pic); gv_pic.setAdapter(new GvAdapter(this)); gv_pic.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { list=new ArrayList<ImageInfo>(); //点击位置及对象传入dialog PicShowDialog dialog=new PicShowDialog(MainActivity.this,list,position); dialog.show(); } }); }}
PicShowDialog用于图片展示dialog
public class PicShowDialog extends Dialog { private Context context; private View view; private List<ImageInfo> imageInfos;//接收传入集合 private MyViewPager vp; private List<View> views = new ArrayList<View>();//图片上圆点集合 private LayoutAnimationController lac; private LinearLayout ll_point; private ViewPagerAdapter pageAdapter; private int position;//点击位置 private LinearLayout.LayoutParams paramsL = new LinearLayout.LayoutParams(10, 10); // 图片缓存 默认 等 private DisplayImageOptions optionsImag = new DisplayImageOptions.Builder() .showImageForEmptyUri(R.mipmap.zanwutupian) .showImageOnFail(R.mipmap.zanwutupian).cacheInMemory(true).cacheOnDisk(true) .considerExifParams(true).imageScaleType(ImageScaleType.EXACTLY) .bitmapConfig(Bitmap.Config.RGB_565).build(); public PicShowDialog(Context context, int themeResId) { super(context, themeResId); this.context = context; } public PicShowDialog(Context context, List<ImageInfo> imageInfos, int position) { this(context, R.style.Pic_Dialog); this.imageInfos = imageInfos; this.position = position; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.act_dialog_pic); getWindow().setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);// getWindow().setLayout(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); vp = (MyViewPager) findViewById(R.id.vp); ll_point = (LinearLayout) findViewById(R.id.ll_point);// init(); initMyPageAdapter();// vp.setAdapter(new ViewPagerAdapter()); vp.setCurrentItem(position); //滑动监听设置图片滑动时,相应点跟着变化 vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int i, float v, int i1) { } @Override public void onPageSelected(int position) { if (views.size() != 0 && views.get(position) != null) { for (int i = 0; i < views.size(); i++) { if (i == position) { views.get(i).setBackgroundResource(R.drawable.point_focus2); } else { views.get(i).setBackgroundResource(R.drawable.point_normal2); } } } } @Override public void onPageScrollStateChanged(int i) { } }); } /*** * 初始化viewpager适配器 */ private void initMyPageAdapter() { initPoint(); if (pageAdapter == null) { pageAdapter = new ViewPagerAdapter(); if (vp != null) { vp.setAdapter(pageAdapter); } } else { pageAdapter.notifyDataSetChanged(); } }//初始化圆点 private void initPoint() { views.clear(); ll_point.removeAllViews(); if (imageInfos.size()==1){ ll_point.setVisibility(View.GONE); }else { for (int i = 0; i < imageInfos.size(); i++) { View view = new View(context); paramsL.setMargins(dip2px(context, 5), dip2px(context, 2), 0, dip2px(context, 5)); view.setLayoutParams(paramsL); if (i == position) { view.setBackgroundResource(R.drawable.point_focus2); } else { view.setBackgroundResource(R.drawable.point_normal2); } views.add(view); ll_point.addView(view); } } }//viewpager适配器 private class ViewPagerAdapter extends PagerAdapter { @Override public int getCount() { return imageInfos.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { View view =View.inflate(context, R.layout.item_pic_show, null); PhotoView photoView = (PhotoView) view.findViewById(R.id.pic_pv);//这里使用Imageloader加载框架,加载网络图片,图片地址给的是网络图片。 ImageLoader.getInstance().displayImage(imageInfos.get(position).getUrl(),photoView,optionsImag); photoView.setOnPhotoTapListener(new PhotoViewAttacher.OnPhotoTapListener() { @Override public void onPhotoTap(View view, float x, float y) { dismiss(); } }); ((ViewPager) container).addView(view); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { ((ViewPager) container).removeView((View) object); } } private int dip2px(Context context, float dpValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f); }}
GridView适配器GvAdapter
public class GvAdapter extends BaseAdapter { private Context context; private List<ImageInfo> list; // 图片缓存 默认 等 private DisplayImageOptions optionsImag = new DisplayImageOptions.Builder() .showImageForEmptyUri(R.mipmap.zanwutupian) .showImageOnFail(R.mipmap.zanwutupian).cacheInMemory(true).cacheOnDisk(true) .considerExifParams(true).imageScaleType(ImageScaleType.EXACTLY) .bitmapConfig(Bitmap.Config.RGB_565).build(); public GvAdapter(Context context, List<ImageInfo> list){ this.context=context; this.list=list; } @Override public int getCount() { return list==null?0:list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { convertView=View.inflate(context, R.layout.item_image_view, null); ImageView iv_image= (ImageView) convertView.findViewById(R.id.iv_image); ImageLoader.getInstance().displayImage(list.get(position).getUrl(),iv_image,optionsImag); return convertView; }}
项目DEMO地址:http://download.csdn.net/detail/wxk105/9562369可进群下载:573239233
1 0
- ImageView+ViewPager+PhotoView实现朋友圈图片点击全屏查看支持放大缩小
- PhotoView 放大缩小图片,支持gif格式
- 微信朋友圈的实现(图片查看,手势放大、缩小)
- photoview简单实现图片放大缩小
- 简述如何嵌套使用Viewpager,点击图片放大查看图片,并且使用PhotoView进行图片处理
- 使用ViewPager和Photoview实现图片左右滑动和放大缩小
- viewpager实现图片放大缩小
- 使用photoview+viewpager实现图片缩放切换(类似微信朋友圈图片查看)
- 支持点击放大缩小图片,拖动放大缩小图片功能
- 快速实现图片点击放大缩小,支持url
- PhotoView双击放大缩小图片
- photoview-----图片放大与缩小
- PhotoView图片放大缩小使用方法
- RecyclerView + 九宫格图片 + ViewPager + PhotoView 实现列表图片点击放大并能缩放思路
- Android相册支持查看本地相册,点击放大图片,滑动切换图片,手势放大缩小
- PhotoView实现放大缩小功能
- android 自定义imageview实现 图片放大缩小
- 放大缩小图片ImageView的实现
- Win7基于theano的keras安装及GPU加速
- LeetCode - 217. Contains Duplicate
- java.lang包
- asp.net mvc中应用Grid++ Report (基本应用示例)
- JAVA之旅【第二天】 常量 进制 数据类型 变量 运算符
- ImageView+ViewPager+PhotoView实现朋友圈图片点击全屏查看支持放大缩小
- 多线程学习之--真的不能在子线程里更新UI吗?
- 细说addEventListener与事件捕获、事件冒泡
- struct stat各成员含义
- OpenCV入门学习1
- Java数组拼接字符串几个写法性能比较
- bzoj4565【HAOI2016】字符合并
- 概率论里的 随机变量相关的严格定义
- JDK基础类之GZIPInputStream/GZIPOutputStream