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
原创粉丝点击