【Android UI】案例03滑動轉場效果的實現(ViewPager)

來源:互聯網
上載者:User

標籤:android   介面設計   滑動   viewpager   

       本例使用ViewPager實現滑動切換的效果。本例涉及的ViewPager,為android.support.v4.view.ViewPager。所以需要在android項目中匯入android-support-v4.jar。
       本例中ViewPager是實現滑動效果的核心部分。對其設定PageChangeListener監聽事件,是實現滑動效果的核心思路。

【轉載使用,請註明出處:http://blog.csdn.net/mahoking】
       首先是主介面layout.xml檔案,activity_03_viewpager.xml。主介面的布局是頂部為頁面標籤,點擊標籤或滑動頁面都可以實現切換頁面的功能。

<?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:orientation="vertical" >    <LinearLayout android:layout_width="match_parent"        android:layout_height="40dp"        android:orientation="horizontal">        <TextView android:layout_height="match_parent"            android:layout_width="match_parent"            android:layout_weight="1"            android:gravity="center"            android:text="選項卡01"            android:id="@+id/activity_03_viewpager_textview_01"/>        <TextView android:layout_height="match_parent"            android:layout_width="match_parent"            android:layout_weight="1"            android:text="選項卡02"            android:gravity="center"            android:id="@+id/activity_03_viewpager_textview_02"/>        <TextView android:layout_height="match_parent"            android:layout_width="match_parent"            android:layout_weight="1"            android:gravity="center"            android:text="選項卡03"            android:id="@+id/activity_03_viewpager_textview_03"/>    </LinearLayout><ImageView        android:id="@+id/cursor"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:scaleType="matrix"        android:src="@drawable/example03_cursor" /><android.support.v4.view.ViewPager        android:id="@+id/activity_03_viewpager_vPager"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="center"        android:layout_weight="1.0"        android:background="#000000"        android:flipInterval="30"        android:persistentDrawingCache="animation" /></LinearLayout>

       以上需要一個ImageView組件,該組件實現一種動態移動標籤的效果,讀者可以自行選擇喜歡的標籤下的底部長方形圖片。可參考效果。
      主Activity(ViewPagerActivity)的編寫。首先是全域變數的定義:

private ViewPager mPager;// 頁卡內容private List<View> listViews; // Tab頁面列表private ImageView cursor;// 動畫圖片private TextView t1, t2, t3;// 頁卡頭標private int offset = 0;// 動畫圖片位移量private int currIndex = 0;// 當前頁卡編號private int bmpW;// 動畫圖片寬度

         本例提供了三個初始化布局空間的方法,分別為:initTextViews()、initImageView()、initViewPager()。

initTextViews()

private void initTextViews() {t1 = (TextView) findViewById(R.id.activity_03_viewpager_textview_01);t2 = (TextView) findViewById(R.id.activity_03_viewpager_textview_02);t3 = (TextView) findViewById(R.id.activity_03_viewpager_textview_03);t1.setOnClickListener(new MyOnClickListener(0));t2.setOnClickListener(new MyOnClickListener(1));t3.setOnClickListener(new MyOnClickListener(2));}


initImageView()

private void initViewPager() {mPager = (ViewPager) findViewById(R.id.activity_03_viewpager_vPager);listViews = new ArrayList<View>();LayoutInflater mInflater = getLayoutInflater();listViews.add(mInflater.inflate(R.layout.layout_03_layout01, null));listViews.add(mInflater.inflate(R.layout.layout_03_layout02, null));listViews.add(mInflater.inflate(R.layout.layout_03_layout03, null));mPager.setAdapter(new ViewPagerAdapter(listViews));mPager.setCurrentItem(0);mPager.setOnPageChangeListener(new MyOnPageChangeListener());}

 

initViewPager()

/** * 初始化動畫 */private void initImageView() {cursor = (ImageView) findViewById(R.id.cursor);bmpW = BitmapFactory.decodeResource(getResources(), R.drawable.example03_cursor).getWidth();// 擷取圖片寬度DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(dm);int screenW = dm.widthPixels;// 擷取解析度寬度offset = (screenW / 3 - bmpW) / 2;// 計算位移量Matrix matrix = new Matrix();matrix.postTranslate(offset, 0);cursor.setImageMatrix(matrix);// 設定動畫初始位置}


        有上述方法可見,本例需要兩內部類MyOnClickListener、MyOnPageChangeListener,去處理監聽事件。
MyOnClickListener

/** * 點擊監聽事件 * */public class MyOnClickListener implements View.OnClickListener {private int index = 0;public MyOnClickListener(int i) {index = i;}@Overridepublic void onClick(View v) {mPager.setCurrentItem(index);}};

MyOnPageChangeListener

/** *  *頁卡切換監聽 */public class MyOnPageChangeListener implements OnPageChangeListener{ int one = offset * 2 + bmpW;// 頁卡1 -> 頁卡2 位移量       int two = one * 2;// 頁卡1 -> 頁卡3 位移量        @Override         public void onPageSelected(int arg0) {             Animation animation = null;             switch (arg0) {            case 0:                if (currIndex == 1) {                    animation = new TranslateAnimation(one, 0, 0, 0);                 } else if (currIndex == 2) {                    animation = new TranslateAnimation(two, 0, 0, 0);                 }                 break;            case 1:                 if (currIndex == 0) {                    animation = new TranslateAnimation(offset, one, 0, 0);                 } else if (currIndex == 2) {                     animation = new TranslateAnimation(two, one, 0, 0);                 }                break;            case 2:                if (currIndex == 0) {                    animation = new TranslateAnimation(offset, two, 0, 0);                } else if (currIndex == 1) {                    animation = new TranslateAnimation(one, two, 0, 0);                 }                 break;            }             currIndex = arg0;             animation.setFillAfter(true);// True:圖片停在動畫結束位置            animation.setDuration(300);             cursor.startAnimation(animation);         }         @Override        public void onPageScrolled(int arg0, float arg1, int arg2) {         }          @Override        public void onPageScrollStateChanged(int arg0) {        }}


         在此補充一下,本例需要展示三個頁卡,所以還需要三個頁卡內容的介面設計,在這裡我們只設定了背景顏色,只為起到區別作用。

layout_03_layout01.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"     android:background="#FF6666">    </LinearLayout>


效果:

 

【轉載使用,請註明出處:http://blog.csdn.net/mahoking】

 

【Android UI】案例03滑動轉場效果的實現(ViewPager)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.