ViewPager详解(一)——ViewPager的基本使用完整示例
生活随笔
收集整理的這篇文章主要介紹了
ViewPager详解(一)——ViewPager的基本使用完整示例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
MainActivity如下:
package cn.ww;import java.lang.reflect.Field;import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.support.v4.view.ViewPager; import android.support.v4.widget.EdgeEffectCompat; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.widget.ImageView; import android.widget.LinearLayout; /*** * @author http://blog.csdn.net/lfdfhl* * Demo描述:* 1 ViewPager的基本使用完整示例* 2 ViewPager處于最后一頁時,手指從屏幕右方滑向左邊時頁面跳轉.**/ public class MainActivity extends Activity {private Context mContext;private ViewPager mViewPager;private LauncherViewPagerAdapter mViewPagerAdapter;private ImageView[] dotImageViews;private PageChangeListenerImpl mPageChangeListenerImpl;private LinearLayout mDotsLinearLayout;//以下三個變量涉及到的功能:滑動到最后一頁繼續滑動時關閉ViewPager//若不需要該功能,將此三個變量和與之相關代碼注釋即可private EdgeEffectCompat leftEdge;private EdgeEffectCompat rightEdge;private boolean misScrolled = false;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//去掉狀態欄requestWindowFeature(Window.FEATURE_NO_TITLE);getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);setContentView(R.layout.activity_main);init();}private void init() {mContext = this;mViewPager = (ViewPager) findViewById(R.id.guide_viewpager);mDotsLinearLayout = (LinearLayout) findViewById(R.id.dotsLinearLayout);mViewPagerAdapter = new LauncherViewPagerAdapter(mContext);mPageChangeListenerImpl = new PageChangeListenerImpl();mViewPager.setAdapter(mViewPagerAdapter);mViewPager.setOnPageChangeListener(mPageChangeListenerImpl);try {Field leftEdgeField = mViewPager.getClass().getDeclaredField("mLeftEdge");Field rightEdgeField = mViewPager.getClass().getDeclaredField("mRightEdge");if (leftEdgeField != null && rightEdgeField != null) {leftEdgeField.setAccessible(true);rightEdgeField.setAccessible(true);leftEdge = (EdgeEffectCompat) leftEdgeField.get(mViewPager);rightEdge = (EdgeEffectCompat) rightEdgeField.get(mViewPager);}} catch (Exception e) {e.printStackTrace();}initDots();}//初始化小圓點private void initDots() {dotImageViews = new ImageView[mViewPagerAdapter.getCount()];for (int i = 0; i < dotImageViews.length; i++) {LinearLayout layout = new LinearLayout(mContext);ImageView imageView = new ImageView(mContext);imageView.setLayoutParams(new ViewGroup.LayoutParams(20, 20));if (i == 0) {imageView.setBackgroundResource(R.drawable.guide_dot_white);} else {layout.setPadding(20, 0, 0, 0);imageView.setBackgroundResource(R.drawable.guide_dot_black);}dotImageViews[i] = imageView;layout.addView(imageView);mDotsLinearLayout.addView(layout);}}private class PageChangeListenerImpl implements ViewPager.OnPageChangeListener {@Overridepublic void onPageSelected(int selected) {for (int i = 0; i < dotImageViews.length; i++) {dotImageViews[selected].setBackgroundResource(R.drawable.guide_dot_white);if (selected != i) {dotImageViews[i].setBackgroundResource(R.drawable.guide_dot_black);}}}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {if (leftEdge != null && rightEdge != null) {leftEdge.finish();rightEdge.finish();leftEdge.setSize(0, 0);rightEdge.setSize(0, 0);}}@Overridepublic void onPageScrollStateChanged(int state) {switch (state) {case ViewPager.SCROLL_STATE_DRAGGING:misScrolled = false;break;case ViewPager.SCROLL_STATE_SETTLING:misScrolled = true;break;case ViewPager.SCROLL_STATE_IDLE:if (mViewPager.getCurrentItem() == mViewPager.getAdapter().getCount() - 1 && !misScrolled) {//頁面跳轉的邏輯finish();}misScrolled = true;break;}}}@Overrideprotected void onDestroy() {super.onDestroy();if(null!=mViewPager){mViewPager.removeAllViews();mViewPager = null;}}}LauncherViewPagerAdapter如下:
package cn.ww;import android.content.Context; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView;public class LauncherViewPagerAdapter extends PagerAdapter {private Context mContext;private int[] pagesArray = {R.drawable.a,R.drawable.b, R.drawable.c, R.drawable.d};public LauncherViewPagerAdapter(Context context) {this.mContext = context;}@Overridepublic int getCount() {return pagesArray.length;}@Overridepublic Object instantiateItem(View container, int position) {View itemView = LayoutInflater.from(mContext).inflate(R.layout.guide_pager_adapter, null);itemView.setFocusable(true);ImageView imageView = (ImageView) itemView.findViewById(R.id.imageView);imageView.setBackgroundResource(pagesArray[position]);((ViewPager) container).addView(itemView);return itemView;}@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {return arg0 == arg1;}@Overridepublic void destroyItem(View container, int position, Object object) {((ViewPager) container).removeView((View) object);} }
activity_main如下: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"><android.support.v4.view.ViewPagerandroid:id="@+id/guide_viewpager"android:layout_width="match_parent"android:layout_height="match_parent" /><LinearLayoutandroid:id="@+id/dotsLinearLayout"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_marginBottom="100px"android:layout_centerHorizontal="true"android:orientation="horizontal"></LinearLayout></RelativeLayout>
guide_pager_adapter如下:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><ImageViewandroid:id="@+id/imageView"android:layout_width="match_parent"android:layout_height="match_parent" /></RelativeLayout>
總結
以上是生活随笔為你收集整理的ViewPager详解(一)——ViewPager的基本使用完整示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 页面置换算法 - FIFO、LFU、LR
- 下一篇: 对象序列化