溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Android怎么使用ViewPager實現(xiàn)畫廊Gallery效果

發(fā)布時間:2021-07-27 22:12:49 來源:億速云 閱讀:515 作者:chen 欄目:云計算

本篇內容介紹了“Android怎么使用ViewPager實現(xiàn)畫廊Gallery效果”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

在手機QQ上切換封面主題板塊,以及在某些App Shop中,我們經??匆奊allery效果的影子,但Gallery以及被一起了,這里我們實現(xiàn)使用ViewPager實現(xiàn)Gallery效果

布局文件:

(注意,根布局和ViewPager都要使用android:clipChildren="false",表示當顯示內容區(qū)域超過控件區(qū)域,

是否裁剪內容區(qū)域的寬度和高度,以實現(xiàn)遮蓋超出區(qū)域,默認是true)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/gallery_viewpager_layout"
    android:clipChildren="false" 
    android:orientation="vertical" >
    
	<android.support.v4.view.ViewPager 
	    android:id="@+id/gallery_viewpager"
	    android:layout_width="match_parent"
	    android:layout_height="match_parent"
	    android:layout_gravity="center"  
            android:clipChildren="false"
	    />
</LinearLayout>

代碼文件

public class ViewPagerGallery extends Activity {

	private ViewPager mGalleryViewPager;
	
	private LinearLayout mViewPagerContainer;
	
	private int pagerWidth = 0;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.viewpager_gallery);
		
	mGalleryViewPager = (ViewPager)findViewById(R.id.gallery_viewpager);  
        mViewPagerContainer = (LinearLayout)findViewById(R.id.gallery_viewpager_layout);  
        
       pagerWidth =  (int) (getResources().getDisplayMetrics().widthPixels*3.0f/5.0f);
       mGalleryViewPager.measure(0, 0);
       LayoutParams lp = mGalleryViewPager.getLayoutParams();
       if(lp==null)
       {
    	   lp = new LayoutParams(pagerWidth,LayoutParams.MATCH_PARENT);
       }else{
    	   lp.width = pagerWidth;
       }
       mGalleryViewPager.setLayoutParams(lp);//設置頁面寬度為屏幕的3/5
       mGalleryViewPager.setOffscreenPageLimit(4);  //設置ViewPager至多緩存4個Pager頁面,防止多次加載
       mGalleryViewPager.setPageMargin(50);  //設置Pager之間的間距
       mGalleryViewPager.setAdapter(new GalleryPagerAdapter()); 
        
       mGalleryViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){
        	@Override
        	public void onPageScrolled(int position, float positionOffset,
        			int positionOffsetPixels) {
        		super.onPageScrolled(position, positionOffset, positionOffsetPixels);
        		if (mViewPagerContainer != null) 
        		{  
        			mViewPagerContainer.invalidate();  //更新超出區(qū)域頁面,否則會出現(xiàn)頁面緩存,導致頁面效果不佳
                        }  
        	}
        });  
	}
	private class GalleryPagerAdapter extends PagerAdapter
	{
		@Override
		public int getCount() 
		{
			return 6;
		}

		@Override
		public boolean isViewFromObject(View view, Object obj)
		{
			return view==obj;
		}
		
		@Override
		public void destroyItem(ViewGroup container, int position, Object object) {
			((ViewPager)container).removeView((ImageView)object); 
		}
		
		@Override
		public Object instantiateItem(ViewGroup container, int position) {
			int resId = getResources().getIdentifier("img0".concat(String.valueOf(position)), "drawable", getPackageName());
			ImageView imageView = createImageView(resId);
			((ViewPager)container).addView(imageView, position); 
			return imageView;
		}
		
		
		public ImageView createImageView(int resId)
		{
			ImageView iv = new ImageView(ViewPagerGallery.this);
			LayoutParams lp = iv.getLayoutParams();
			if(lp==null)
			{
				lp = new LayoutParams(pagerWidth, LayoutParams.MATCH_PARENT);
			}else{
				lp.width = pagerWidth;
				lp.height = LayoutParams.MATCH_PARENT;
			}
			iv.setScaleType(ScaleType.FIT_CENTER);
			iv.setImageResource(resId);
			iv.setLayoutParams(lp);
			return iv;
		}
	}
}

Android怎么使用ViewPager實現(xiàn)畫廊Gallery效果    Android怎么使用ViewPager實現(xiàn)畫廊Gallery效果    Android怎么使用ViewPager實現(xiàn)畫廊Gallery效果

Try doing it;

“Android怎么使用ViewPager實現(xiàn)畫廊Gallery效果”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節(jié)

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

AI