Android之ViewPager(引導介面)(一),androidviewpager

來源:互聯網
上載者:User

Android之ViewPager(引導介面)(一),androidviewpager

雖然我們無法改變人生,但可以改變人生觀。雖然我們無法改變環境,但我們可以改變心境。


本講內容:ViewPager控制項的用法

與LisstView類似,也需要一個適配器,他就是PagerAdapter。


使用步驟:

一、在住布局檔案裡加入

<android.support.v4.view.ViewPager        android:id="@+id/viewPager"        android:layout_width="match_parent"        android:layout_height="match_parent" /><!-- 注意這個組件是用來顯示左右滑動的介面的,如果不載入xml布局檔案,他是不會顯示內容的。   -->


二、載入要顯示的頁卡

LayoutInflater lf = getLayoutInflater().from(this);          view1 = lf.inflate(R.layout.layout1, null);          view2 = lf.inflate(R.layout.layout2, null);          view3 = lf.inflate(R.layout.layout3, null);            viewList = new ArrayList<View>();// 將要分頁顯示的View裝入數組中           viewList.add(view1);          viewList.add(view2);          viewList.add(view3);  

三、需要一個適配器


樣本一:

        


下面是res/layout/activity_main.xml 布局檔案:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="wrap_content"    android:layout_height="wrap_content" >    <android.support.v4.view.ViewPager        android:id="@+id/viewPager"        android:layout_width="match_parent"        android:layout_height="match_parent" /><!-- 注意這個組件是用來顯示左右滑動的介面的,如果不載入xml布局檔案,他是不會顯示內容的。   -->    <LinearLayout        android:id="@+id/layout1"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_alignParentBottom="true"        android:layout_centerHorizontal="true"        android:layout_marginBottom="25dp"        android:orientation="horizontal" >        <ImageView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="center_vertical"            android:clickable="true"            android:padding="20dp"            android:src="@drawable/point" />        <ImageView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="center_vertical"            android:clickable="true"            android:padding="20dp"            android:src="@drawable/point" />        <ImageView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="center_vertical"            android:clickable="true"            android:padding="20dp"            android:src="@drawable/point" />        <ImageView            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="center_vertical"            android:clickable="true"            android:padding="20dp"            android:src="@drawable/point" />    </LinearLayout></RelativeLayout>


下面是res/drawable/paint.xml 檔案:

<?xml version="1.0" encoding="UTF-8"?><selector  xmlns:android="http://schemas.android.com/apk/res/android">    <item android:state_enabled="true" android:drawable="@drawable/point_normal" />    <item android:state_enabled="false" android:drawable="@drawable/point_select" /></selector>


下面是ViewPagerAdapter.java檔案:

當你實現一個PagerAdapter,你必須至少覆蓋以下4個方法:

  • instantiateItem(ViewGroup, int)、destroyItem(ViewGroup, int, Object)
  • getCount()、isViewFromObject(View, Object)

//ViewPager適配器,用來綁定資料和viewpublic class ViewPagerAdapter extends PagerAdapter{////介面列表private ArrayList<View> views;public ViewPagerAdapter(ArrayList<View> views){this.views=views;}//獲得當前頁卡的數量  public int getCount() {if(views!=null){return views.size();}return 0;}//執行個體化(初始化)頁卡public Object instantiateItem(View container, int position) { ((ViewPager) container).addView(views.get(position), 0);//添加頁卡    return views.get(position);}//銷毀頁卡public void destroyItem(View container, int position, Object object) {((ViewPager)container).removeView(views.get(position));//刪除頁卡   }//判斷是否由對象產生介面public boolean isViewFromObject(View arg0, Object arg1) {return (arg0==arg1);//官方提示這樣寫 }}

下面是MainActivity.java主介面檔案:

public class MainActivity extends Activity implements OnClickListener,OnPageChangeListener{private ViewPager viewPager;// 定義ViewPager對象private ViewPagerAdapter vpAdapter;// 定義ViewPager適配器private ArrayList<View> views;// 定義一個ArrayList來存放View// 引導圖片資源private static final int[] pics = { R.drawable.guide1, R.drawable.guide2,R.drawable.guide3, R.drawable.guide4 };// 底部小點的圖片private ImageView[] points;// 記錄當前選中位置private int currentIndex;protected void onCreate(Bundle savedInstanceState) {requestWindowFeature(Window.FEATURE_NO_TITLE);super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();initData();}// 初始化組件private void initView() {// 執行個體化ArrayList對象views = new ArrayList<View>();// 執行個體化ViewPagerviewPager = (ViewPager) findViewById(R.id.viewPager);// 執行個體化ViewPager適配器vpAdapter = new ViewPagerAdapter(views);}// 初始化資料private void initData() {// 定義一個布局並設定參數LinearLayout.LayoutParams mParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT);//初始化引導圖片列表for(int i=0;i<pics.length;i++){ImageView iv=new ImageView(this);iv.setLayoutParams(mParams);iv.setImageResource(pics[i]);views.add(iv);}//設定資料viewPager.setAdapter(vpAdapter);//設定監聽viewPager.setOnPageChangeListener(this);//初始化底部小點initPoint();}//初始化底部小點private void initPoint() {LinearLayout layout1=(LinearLayout) findViewById(R.id.layout1);points = new ImageView[pics.length];//迴圈取得小點圖片for(int i=0;i<pics.length;i++){//得到一個LinearLayout下面的每一個子項目points[i]=(ImageView) layout1.getChildAt(i);//獲得第i個控制項!<span style="color: rgb(51, 51, 51); font-family: 'Microsoft Yahei'; font-size: 14px; line-height: 28px; white-space: pre-wrap;">getChildAt裡面的參數就是布局裡面層次的索引</span>//預設都設為灰色points[i].setEnabled(true);//給每個小點設定監聽points[i].setOnClickListener(this);//設定位置tag,方便取出與當前位置對應points[i].setTag(i);}//設定當面預設的位置currentIndex=0;//設定為白色,即選中狀態points[currentIndex].setEnabled(false);}//當滑動狀態改變時調用public void onPageScrollStateChanged(int arg0) {}//當前頁面被滑動時調用public void onPageScrolled(int arg0, float arg1, int arg2) {}//當新的頁面被選中時調用public void onPageSelected(int position) {//設定底部小點選中狀態setCurDot(position);}//通過點擊事件來切換當前的頁面public void onClick(View v) {int position=(Integer) v.getTag();setCurView(position);setCurDot(position);}//設定當前頁面的位置private void setCurView(int position) {if(position<0||position>=pics.length){return;}viewPager.setCurrentItem(position);}//設定當前的小點的位置private void setCurDot(int position) {if(position<0||position>pics.length-1||currentIndex==position){return;}points[position].setEnabled(false);points[currentIndex].setEnabled(true);currentIndex=position;}}

Take your time and enjoy it



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.