国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android使用ViewPager實現(xiàn)滾動廣告

2019-10-21 21:35:36
字體:
供稿:網(wǎng)友

在一些類似于淘寶的電商網(wǎng)站上經(jīng)常能夠看到一些滾動的廣告條,許多軟件在首頁也有類似的廣告條,如圖:

Android,ViewPager,滾動廣告

實現(xiàn)起來并不是很復雜的,結(jié)合網(wǎng)上的一些教程,實現(xiàn)了現(xiàn)在這樣一個可以幾張圖循環(huán)播放,并且可以手指滑動切換的效果。

工程文件結(jié)構(gòu):

Android,ViewPager,滾動廣告

布局文件:

<?xml version="1.0" encoding="utf-8"?><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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="yuxin.ad.MainActivity"> <android.support.v4.view.ViewPager  android:id="@+id/viewPager"  android:layout_width="wrap_content"  android:layout_height="200dp"  android:adjustViewBounds="true" /> <LinearLayout  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:layout_alignBottom="@id/viewPager"  android:background="#33000000"  android:orientation="vertical"  android:padding="5dp">  <LinearLayout   android:id="@+id/show_point"   android:layout_width="wrap_content"   android:layout_height="wrap_content"   android:layout_gravity="center_horizontal"   android:orientation="horizontal" /> </LinearLayout></RelativeLayout>

最上面是一個ViewPager,用來展示需要滾動播放的圖片;下面是一個 線性布局,用來放最下面的幾個小圓點,也可以在里面放一些TextView等,小圓點的 數(shù)量是根據(jù)圖片數(shù)量動態(tài)添加的。

MainActivity.java

public class MainActivity extends AppCompatActivity { private ViewPager viewPager; // 存放圖片 private List<ImageView> imageViewList; private ImageView imageView; // 存放小圓點布局文件 private LinearLayout layoutPointGroup; // 線程開關(guān),當activity銷毀后,線程也應該停止運行 private boolean isStop = false; private int previousPoint = 0; @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  // 初始化  init();  //設(shè)置圖片自動滾動  new Thread(new Runnable() {   @Override   public void run() {    //如果activity未銷毀則一直執(zhí)行    while (!isStop) {     //先休息3秒鐘     try {      Thread.sleep(3000);     } catch (InterruptedException e) {      e.printStackTrace();     }     //以下代碼發(fā)送到主線程中執(zhí)行     runOnUiThread(new Runnable() {      @Override      public void run() {       viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);      }     });    }   }  }).start(); } private void init() {  viewPager = (ViewPager) findViewById(R.id.viewPager);  layoutPointGroup = (LinearLayout) findViewById(R.id.show_point);  imageViewList = new ArrayList<ImageView>();  // TODO:獲取圖片ID  int[] imageIDs = {R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e};  for (int id : imageIDs) {   // 構(gòu)造新的圖片對象,并根據(jù)id 設(shè)置圖片背景   imageView = new ImageView(this);   imageView.setImageResource(id);   // 所有圖片都存放在 imageViewList 里面   imageViewList.add(imageView);   // 構(gòu)造小點   View v = new View(this);   // 設(shè)置小點的寬和高   LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(8, 8);   // 設(shè)置小點的左邊距   params.leftMargin = 12;   v.setLayoutParams(params);   // 設(shè)置小點是否可用,默認都不可用,當不可用時,小點是透明的,否則是白色的   v.setEnabled(false);   // 設(shè)置小點的背景,這個背景是使用xml文件畫的一個小圓點   v.setBackgroundResource(R.drawable.pointer_selector);   // 把小點添加到它的布局文件中   layoutPointGroup.addView(v);  }  // 計算應用打開時顯示的第一項 Integer.MAX_VALUE /2 - 3=0  int index = Integer.MAX_VALUE / 2 - 3;  // 給mViewPager設(shè)置數(shù)據(jù)  viewPager.setAdapter(new MyPagerAdapter());  // 給mViewPager設(shè)置頁面滑動事件  viewPager.setOnPageChangeListener(new MyOnPageChangeListener());  // 設(shè)置應用打開時顯示的第一項,index的值為0  // 使用這種方式得到的0,和直接寫0有什么區(qū)別呢?  // 直接寫0,應用打開后不能直接向右滑動,因為viewpager中存image位置不能為負值,只能先向左滑動  // 這種方式得到的0,可以實現(xiàn)應用一打開,就可以向右滑動  viewPager.setCurrentItem(index); } private class MyPagerAdapter extends PagerAdapter {  @Override  public int getCount() {   return Integer.MAX_VALUE;  }  @Override  public boolean isViewFromObject(View view, Object object) {   return view == object;  }  // 當一頁滑出去的時候?qū)⑺N毀  @Override  public void destroyItem(ViewGroup container, int position, Object object) {   container.removeView(imageViewList.get(position % imageViewList.size()));  }  // 向容器中添加圖片,由于我們要實現(xiàn)循環(huán)滑動的效果,所以要對position取模  @Override  public Object instantiateItem(ViewGroup container, int position) {   container.addView(imageViewList.get(position % imageViewList.size()));   return imageViewList.get(position % imageViewList.size());  } } private class MyOnPageChangeListener implements ViewPager.OnPageChangeListener {  // 開始  @Override  public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {  }  // 進行時  @Override  public void onPageSelected(int position) {   // 當頁面滑動結(jié)束時,先對頁面位置取模   position = position % imageViewList.size();   // 將上一個點的可用性設(shè)置為false   layoutPointGroup.getChildAt(previousPoint).setEnabled(false);   // 把當前點的可用性設(shè)置為true   layoutPointGroup.getChildAt(position).setEnabled(true);   // 把當前位置值賦值給previousPoint   previousPoint = position;  }  // 結(jié)束  @Override  public void onPageScrollStateChanged(int state) {  } } // 當activity銷毀時,讓線程停止 @Override public void onDestroy() {  isStop = true;  super.onDestroy(); }}

具體功能實現(xiàn)可以看代碼里的注釋,寫的十分詳細了。

未選中的小圓點pointer_disable.xml:

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" > <!-- 設(shè)置圓角半徑 --> <corners android:radius="0.5dip" /> <!-- 設(shè)置填充的顏色 --> <solid android:color="#55000000" /></shape>

選中時的小圓點pointer_focus.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>

小圓點選擇器:

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 選中時,小點為白色 --> <item android:drawable="@drawable/pointer_focus" android:state_enabled="true"></item> <!-- 未選中時,小點為透明色 --> <item android:drawable="@drawable/pointer_disable" android:state_enabled="false"></item></selector>

完整源碼下載

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 高唐县| 合川市| 武陟县| 滦南县| 无极县| 田阳县| 南汇区| 广丰县| 新竹县| 钟祥市| 石棉县| 万源市| 宁国市| 类乌齐县| 潮州市| 定日县| 涞源县| 内丘县| 桃园市| 剑川县| 万山特区| 天水市| 江门市| 旌德县| 宾阳县| 牡丹江市| 寻甸| 平舆县| 民丰县| 梅河口市| 炉霍县| 馆陶县| 收藏| 芜湖县| 贞丰县| 邵阳县| 大厂| 信宜市| 古丈县| 怀来县| 石景山区|