好久没更新了,最近在研究图库,今天来研究一个功能:图片预览时能放缩,并且可以左右滚动预览多个图片。
实现这个功能要注意两点:
1、放缩图片,对单张图片实现放缩功能,这里实现用多点触控实现放缩,左右上下滑动对放大的图片实现预览,并且能还原到原来尺寸。这里使用photoview这个开源框架控件。
https://codeload.github.com/chrisbanes/PhotoView/zip/master
2、viewpager滑动,这里需要继承viewpager,然后需要对viewpager触摸事件拦截:
@Override public boolean onInterceptTouchEvent(MotionEvent ev) { try { if(((ViewPagerActivity)mCtx).getCurrentPageStatus()){ return super.onInterceptTouchEvent(ev); }else{ return false; } } catch (IllegalArgumentException e) { e.printStackTrace(); return false; } }
这里需要捕获异常,否则索引溢出,其次要加个限制在图片还原到之前尺寸大小就可以实现滑动,不冲突触摸滑动事件。
public boolean getCurrentPageStatus() { //获取当前展示view PhotoView pv = (PhotoView) mViewPager.findViewById(mCurrentPager); if (pv.getScale() == 1.0f) { return true; } else { return false; } } static class SamplePagerAdapter extends PagerAdapter { private static int[] sDrawables = { R.drawable.wallpaper, R.drawable.wallpaper, R.drawable.wallpaper, R.drawable.wallpaper, R.drawable.wallpaper, R.drawable.wallpaper }; @Override public int getCount() { return sDrawables.length; } @Override public View instantiateItem(ViewGroup container, int position) { PhotoView photoView = new PhotoView(container.getContext()); photoView.setImageResource(sDrawables[position]); //给view做标记 photoView.setId(position); // Now just add PhotoView to ViewPager and return it container.addView(photoView, LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); return photoView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } }
这样基本就能实现图库展示图片功能。
时间: 2024-09-30 06:45:01