好久沒更新了,最近在研究圖庫,今天來研究一個功能:圖片預覽時能放縮,並且可以左右滾動預覽多個圖片。
實現這個功能要注意兩點:
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; } }
這樣基本就能實現圖庫展示圖片功能。