ViewPager——之PhotoView

    好久沒更新了,最近在研究圖庫,今天來研究一個功能:圖片預覽時能放縮,並且可以左右滾動預覽多個圖片。

    實現這個功能要注意兩點:

    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;
		}

	}

這樣基本就能實現圖庫展示圖片功能。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章