溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

ViewPager——之PhotoView

發(fā)布時(shí)間:2020-07-02 15:44:58 來(lái)源:網(wǎng)絡(luò) 閱讀:1278 作者:釣伯樂(lè) 欄目:開發(fā)技術(shù)

    好久沒(méi)更新了,最近在研究圖庫(kù),今天來(lái)研究一個(gè)功能:圖片預(yù)覽時(shí)能放縮,并且可以左右滾動(dòng)預(yù)覽多個(gè)圖片。

    實(shí)現(xiàn)這個(gè)功能要注意兩點(diǎn):

    1、放縮圖片,對(duì)單張圖片實(shí)現(xiàn)放縮功能,這里實(shí)現(xiàn)用多點(diǎn)觸控實(shí)現(xiàn)放縮,左右上下滑動(dòng)對(duì)放大的圖片實(shí)現(xiàn)預(yù)覽,并且能還原到原來(lái)尺寸。這里使用photoview這個(gè)開源框架控件。  

https://codeload.github.com/chrisbanes/PhotoView/zip/master

    2、viewpager滑動(dòng),這里需要繼承viewpager,然后需要對(duì)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;
        }
    }

這里需要捕獲異常,否則索引溢出,其次要加個(gè)限制在圖片還原到之前尺寸大小就可以實(shí)現(xiàn)滑動(dòng),不沖突觸摸滑動(dòng)事件。

    

public boolean getCurrentPageStatus() {
//獲取當(dāng)前展示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做標(biāo)記
			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;
		}

	}

這樣基本就能實(shí)現(xiàn)圖庫(kù)展示圖片功能。


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI