ViewPager嵌套PhotoView实现相册效果

今天在github看开源控件,试了一把代码家的PhotoView,结合ViewPager是真的好用,看效果图:

1.配置build.gradle:

    //photoview
    compile 'com.github.chrisbanes.photoview:library:1.2.4'
    //glide
    compile 'com.github.bumptech.glide:glide:3.6.1'

2.PhotoView的用法:

PhotoView的用法很简单,跟普通控件一样,设置宽、高、Id等。

使用的时候调用setImageResource()就可以了。例如:photoView.setImageResource(R.mipmap.ic_launcher);


3.ViewPager和PhotoView结合使用:

先来一个自定义的ViewPager:

public class PhotoViewPager extends ViewPager {

    public PhotoViewPager(Context context) {
        super(context);
    }

    public PhotoViewPager(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        try {
            return super.onInterceptTouchEvent(ev);
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
            return false;
        }
    }
}

再来一个Adapter:

public class MyImageAdapter extends PagerAdapter {

    private List imageUrls;
    private AppCompatActivity activity;

    public MyImageAdapter(List imageUrls, AppCompatActivity activity) {
        this.imageUrls = imageUrls;
        this.activity = activity;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        String url = imageUrls.get(position);
        PhotoView photoView = new PhotoView(activity);
        Glide.with(activity)
                .load(url)
                .placeholder(R.mipmap.ic_launcher)
                .into(photoView);
        container.addView(photoView);
        photoView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                activity.finish();
            }
        });
        return photoView;
    }

    @Override
    public int getCount() {
        return imageUrls != null ? imageUrls.size() : 0;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view == object;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
    }

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }
}

最后就是adctivity了:

public class PhotoViewActivity extends AppCompatActivity implements View.OnClickListener {

    private PhotoViewPager mViewPager;
    private int currentPosition;
    private MyImageAdapter adapter;
    private TextView mTvImageCount;
    private TextView mTvSaveImage;
    private List Urls = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_photo_view);
        initView();
        initData();
    }

    private void initView() {
        mViewPager = (PhotoViewPager) findViewById(R.id.view_pager_photo);
        mTvImageCount = (TextView) findViewById(R.id.tv_image_count);
        mTvSaveImage = (TextView) findViewById(R.id.tv_save_image_photo);
        mTvSaveImage.setOnClickListener(this);

    }

    private void initData() {

        Urls.add("http://imgsrc.baidu.com/imgad/pic/item/caef76094b36acaf0accebde76d98d1001e99ce7.jpg");
        Urls.add("http://pic62.nipic.com/file/20150319/12632424_132215178296_2.jpg");
        Urls.add("http://t1.niutuku.com/960/24/24-617747.jpg");
        Urls.add("http://bizhi.zhuoku.com/wall/jie/20070410/hzw/026.jpg");
        Urls.add("http://pic.58pic.com/58pic/13/75/77/31J58PIC9nU_1024.png");
        Urls.add("http://pic46.nipic.com/20140821/11624852_094342836667_2.jpg");
        Urls.add("http://pic.90sjimg.com/back_pic/u/00/01/53/12/55ecfb7a16ade.jpg");
        Urls.add("http://k73.com/up/allimg/120906/22-120Z6140234L9.jpg");

        adapter = new MyImageAdapter(Urls, this);
        mViewPager.setAdapter(adapter);
        mViewPager.setCurrentItem(currentPosition, false);
        mTvImageCount.setText(currentPosition+1 + "/" + Urls.size());
        mViewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                super.onPageSelected(position);
                currentPosition = position;
                mTvImageCount.setText(currentPosition + 1 + "/" + Urls.size());
            }
        });
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.tv_save_image_photo:
                                            //save image
                break;
        }
    }

}

大功告成


Demo下载

你可能感兴趣的:(GitHub发现)