問題的起源
在項目里,有時候需要實現一個圖片輪播的效果,用來展示Banner。同時,圖片能循環播放,下面還有一排小圓點來指示當前輪播到哪一頁了。
如下圖:

分析
? 圖片的個數是會變化的,同時小圓點的個數也會跟著圖片個數變化
? 每一個page的布局是一樣的。變化的就是小圓點的個數,所以需要用代碼來動態生成小圓點
編碼
布局
首先完成 MainActivity 的布局 activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" > <!-- ViewPager --> <android.support.v4.view.ViewPager android:id="@+id/viewpager" android:layout_width="fill_parent" android:layout_height="180dip" /> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignBottom="@id/viewpager" android:background="#44000000" android:gravity="center" android:orientation="vertical" android:padding="5dip" > <!-- Banner的文字描述 --> <TextView android:id="@+id/tv_banner_text_desc" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@android:color/white" /> <!-- 小圓點的父控件 --> <LinearLayout android:id="@+id/ll_dot_group" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="5dip" android:gravity="center_horizontal" android:orientation="horizontal" > </LinearLayout> </LinearLayout></RelativeLayout>
因為小圓點共有兩種狀態,一個是 enable 為 true 的狀態,和 enable 為 false 的狀態。所以需要為小圓點編寫一個 selector 的 xml 配置文件,放在 drawable 文件夾中。這里,為它命名為 dot_bg_selector.xml
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/point_bg_enable" android:state_enabled="true"></item> <item android:drawable="@drawable/point_bg_normal" android:state_enabled="false"></item></selector>
還需要再寫兩個 xml 文件,作為小圓點在不同狀態下的樣式
point_bg_enable.xml
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > <corners android:radius="0.5dip" /> <solid android:color="#aaFFFFFF" /></shape>
point_bg_normal.xml
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > <corners android:radius="0.5dip" /> <solid android:color="#55000000" /></shape>
準備圖片資源
我在 res/drawable-hdpi 文件夾中放置了幾張圖片,以演示用

開始編碼
代碼都加上詳細注釋了,大家可以看看。有不明白的歡迎指出來
package com.owen.adbanner;import java.util.ArrayList;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.os.SystemClock;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.Toast;import android.widget.LinearLayout.LayoutParams;import android.widget.TextView;/** * ViewPager實現Banner循環滾動 * * @author owen */public class MainActivity extends Activity { /** ViewPager中ImageView的容器 */ private List<ImageView> imageViewContainer = null; /** 上一個被選中的小圓點的索引,默認值為0 */ private int preDotPosition = 0; /** Banner文字描述數組 */ private String[] bannerTextDescArray = { "鞏俐不低俗,我就不能低俗", "樸樹又回來了,再唱經典老歌引萬人大合唱", "揭秘北京電影如何升級", "樂視網TV版大派送", "熱血
主站蜘蛛池模板:
烟台市|
定边县|
邓州市|
保山市|
芦山县|
黄冈市|
扎鲁特旗|
茂名市|
军事|
桦甸市|
竹溪县|
西藏|
广平县|
肃宁县|
健康|
长汀县|
九台市|
通山县|
光山县|
阿拉善盟|
五原县|
亳州市|
兴安县|
克什克腾旗|
泸溪县|
嘉义市|
香河县|
长武县|
西和县|
格尔木市|
姜堰市|
西城区|
乌拉特前旗|
通山县|
东港市|
景德镇市|
察雅县|
文安县|
东辽县|
镇沅|
策勒县|