Android帶導航點的ViewPager

jopen 11年前發布 | 48K 次閱讀 Android Android開發 移動開發

此處為顯示的布局:


<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”

android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" > <android.support.v4.view.ViewPager android:id="@+id/navigation_page" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <LinearLayout android:id="@+id/viewGroup" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:layout_marginBottom="40dp" android:gravity="center_horizontal" android:orientation="horizontal" > </LinearLayout> </RelativeLayout>

此處為ViewPager中顯示的布局:

<?xml version="1.0" encoding="utf-8"?>

<FrameLayout xmlns:android=“http://schemas.android.com/apk/res/android”

android:layout_width="match_parent"
android:layout_height="match_parent" >

<ImageView
    android:id="@+id/img_navigation_page"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scaleType="fitXY"/>

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:id="@+id/img_cancel"
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:layout_alignParentRight="true"
        android:src="@drawable/ic_btn_chat_text" />

    <Button
        android:id="@+id/btn_enter"
        android:layout_width="80dp"
        android:layout_height="30dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="80dp"
        android:background="@drawable/invite_btn_bg"
        android:text="@string/trend_navigation"
        android:textColor="@color/red"
        android:textSize="15sp"
        android:visibility="invisible" />
</RelativeLayout>


代碼部分:
/* 裝分頁顯示的view的數組 /

private ArrayList<View> pageViews;
private ImageView imageView;

/** 將小圓點的圖片用數組表示 */
private ImageView[] imageViews;

// 包裹小圓點的LinearLayout
private LinearLayout mViewPoints;

    //初始化要顯示的頁面,添加到view集合中
private void init(Context context) {
    // 將要分頁顯示的View裝入數組中
    pageViews = new ArrayList<View>();
    pageViews.add(inflater.inflate(R.layout.trend_descript_navigation_item,
            null));
    pageViews.add(inflater.inflate(R.layout.trend_descript_navigation_item,
            null));
    pageViews.add(inflater.inflate(R.layout.trend_descript_navigation_item,
            null));
    pageViews.add(inflater.inflate(R.layout.trend_descript_navigation_item,
            null));
    pageViews.add(inflater.inflate(R.layout.trend_descript_navigation_item,
            null));
    pageViews.add(inflater.inflate(R.layout.trend_descript_navigation_item,
            null));
}

//初始化顯示的控件,有viewpager和顯示導航點的linearlayout
private void initView(Context context,View v) {

// 創建imageviews數組,大小是要顯示的圖片的數量
    imageViews = new ImageView[pageViews.size()];
    // 實例化小圓點的linearLayout和viewpager
     mViewPoints = (LinearLayout) v.findViewById(R.id.viewGroup);
     mViewPager = (ViewPager) v.findViewById(R.id.navigation_page);

    // 添加小圓點的圖片
    for (int i = 0; i < pageViews.size(); i++) {
        imageView = new ImageView(context);
        // 設置小圓點imageview的參數
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                10, 10);
        layoutParams.setMargins(5, 0, 5, 0);
        imageView.setLayoutParams(layoutParams);// 創建一個寬高均為20 的布局
        // 將小圓點layout添加到數組中
        imageViews[i] = imageView;
        // 默認選中的是第一張圖片,此時第一個小圓點是選中狀態,其他不是
        if (i == 0) {
            imageViews[i]
                    .setBackgroundResource(R.drawable.indicator_normal_pressed);
        } else {
            imageViews[i]
                    .setBackgroundResource(R.drawable.indicator_normal);
        }

        // 將imageviews添加到小圓點視圖組
        mViewPoints.addView(imageViews[i]);
    }
    // 設置viewpager的適配器和監聽事件
    mViewPager.setAdapter(new NavigationPageAdapter());
    mViewPager.setOnPageChangeListener(new NavigationPageChangeListener());

}
    //設置要顯示的pageradapter類
private class NavigationPageAdapter extends PagerAdapter {

    // 銷毀position位置的界面
    @Override
    public void destroyItem(View v, int position, Object arg2) {
        ((ViewPager) v).removeView((View) arg2);
    }

    // 獲取當前窗體界面數
    @Override
    public int getCount() {
        return pageViews.size();
    }

    // 初始化position位置的界面
    @Override
    public Object instantiateItem(View v, int position) {
        View contentView = pageViews.get(position);
                /**
                      *顯示頁面的相關操作
                      **/
        ((ViewPager) v).addView(contentView, 0);
        return pageViews.get(position);
    }

    @Override
    public boolean isViewFromObject(View v, Object arg1) {
        return v == arg1;
    }

    @Override
    public void startUpdate(View arg0) {
    }

    @Override
    public int getItemPosition(Object object) {
        return super.getItemPosition(object);
    }

}
    //設置viewpager滑動的事件,實現導航點的滾動

private class NavigationPageChangeListener implements OnPageChangeListener {

@Override
    public void onPageScrollStateChanged(int arg0) {
    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {
    }

    @Override
    public void onPageSelected(int position) {
        for (int i = 0; i < imageViews.length; i++) {
            imageViews[position]
                    .setBackgroundResource(R.drawable.indicator_normal_pressed);
            // 不是當前選中的page,其小圓點設置為未選中的狀態
            if (position != i) {
                imageViews[i]
                        .setBackgroundResource(R.drawable.indicator_normal);
            }
        }
    }

}
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!