最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android App中用Handler實(shí)現(xiàn)ViewPager頁面的自動切換

 更新時間:2016年05月17日 18:52:43   作者:風(fēng)荷舉  
這篇文章主要介紹了Android App中用Handler實(shí)現(xiàn)ViewPager頁面的自動切換的方法,類似于相冊自動播放,主要是切換后要提示當(dāng)前頁面所在的位置,需要的朋友可以參考下

在很多電商網(wǎng)頁及app上都有自動切換的商品的推廣快,感覺體驗(yàn)挺不錯的,正好今天學(xué)習(xí)使用ViewPager,因此也實(shí)現(xiàn)了一個功能類似的demo。

下面是其中的兩個截圖:

2016517184555197.jpg (241×383)2016517184629006.jpg (241×382)

實(shí)現(xiàn)一個自動播放功能的ViewPager,要做的主要有以下的幾個部分:

實(shí)現(xiàn)一個ViewPagerAdapter,用于為ViewPager提供展示內(nèi)容(例如上面的兩張小貓圖片)

 public class ViewPagerAdapter extends PagerAdapter {
    private List<View> mData;
    public ViewPagerAdapter(List<View> mData) {
      this.mData = mData;
    }

    @Override
    public int getCount() {
      return mData.size();
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
      return arg0 == arg1;
    }
    
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
      View v = mData.get(position);
      container.addView(v);
      return v;
    }
    
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
//  super.destroyItem(container, position, object);
      container.removeView(mData.get(position));
    }
    
  }

實(shí)現(xiàn)一個OnPageChangeListener,這樣在頁面切換后可以提示當(dāng)前頁面所在的位置(例如上圖中,左下角的3個圓點(diǎn),紅色表示當(dāng)前頁面)

 private class ViewPageChangeListener implements OnPageChangeListener {

    @Override
    public void onPageScrollStateChanged(int arg0) {
    }

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

    //監(jiān)聽頁面改變事件來改變viewIndicator中的指示圖片
    @Override
    public void onPageSelected(int arg0) {
      int len = viewIndicator.getChildCount();
      for(int i = 0; i < len; ++i)
        viewIndicator.getChildAt(i).setBackgroundResource(R.drawable.tip_normal);
      viewIndicator.getChildAt(arg0).setBackgroundResource(R.drawable.tip_select);
    }
    
  }

實(shí)現(xiàn)一個Handler,用于在一定的時間間隔后修改UI(將當(dāng)前顯示的圖片切換到下一個)

private Handler mHandler = new Handler() {
    public void handleMessage(android.os.Message msg) {
      switch(msg.what) {
      case 1:
        int totalcount = pagers.size();//autoChangeViewPager.getChildCount();
        int currentItem = autoChangeViewPager.getCurrentItem();
        
        int toItem = currentItem + 1 == totalcount ? 0 : currentItem + 1;
        
        Log.i(TAG, "totalcount: " + totalcount + "  currentItem: " + currentItem + "  toItem: " + toItem);
        
        autoChangeViewPager.setCurrentItem(toItem, true);
        
        //每兩秒鐘發(fā)送一個message,用于切換viewPager中的圖片
        this.sendEmptyMessageDelayed(1, 2000);
      }
    }
  };


上面這3段就是主要的代碼,除此之外,還需要在onResume()中發(fā)送一個起始message以及在onStop()中停止ViewPager頁面的自動切換等內(nèi)容。
完整的代碼如下:

public class MainActivity extends Activity {
  private static final String TAG = MainActivity.class.getSimpleName();
  private ViewPager autoChangeViewPager;
  
  //用來指示當(dāng)前顯示圖片所在位置
  private LinearLayout viewIndicator;
  
  //包含要在ViewPager中顯示的圖片
  private List<View> pagers;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    autoChangeViewPager = (ViewPager) findViewById(R.id.autoVP);
    viewIndicator = (LinearLayout) findViewById(R.id.vpindicator);
    
    initAdapter();
    
    //監(jiān)聽頁面改變事件來改變viewIndicator中的指示圖片
    autoChangeViewPager.setOnPageChangeListener(new ViewPageChangeListener());
    
  }
  
  private void initAdapter() {
    //即將在viewPager中展示的圖片資源
    int[] imgs = {R.drawable.i1, R.drawable.i2, R.drawable.i3};
    
    //init pagers;
    pagers = new ArrayList<View>();
    LinearLayout.LayoutParams img_params = new LayoutParams(
        LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT
        );
    for(int i = 0; i < imgs.length; ++i) {
      ImageView iv = new ImageView(this);
      iv.setBackgroundResource(imgs[i]);
      iv.setLayoutParams(img_params);
      final int index = i;
      iv.setOnClickListener(new OnClickListener() {
        //當(dāng)viewPager中的圖片被點(diǎn)擊后,跳轉(zhuǎn)到新的activity
        @Override
        public void onClick(View v) {
          Intent i = new Intent(MainActivity.this, InvokedActivity.class);
          i.putExtra("name", "cat " + index);
          MainActivity.this.startActivity(i);
        }
      });
      pagers.add(iv);
    }
    autoChangeViewPager.setAdapter(new ViewPagerAdapter(pagers));
    
    //init indicator
    LinearLayout.LayoutParams ind_params = new LayoutParams(
        LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT
        );
    for(int i = 0; i < imgs.length; ++i) {
      ImageView iv = new ImageView(this);
      if(i == 0)
        iv.setBackgroundResource(R.drawable.tip_select);
      else
        iv.setBackgroundResource(R.drawable.tip_normal);
      iv.setLayoutParams(ind_params);
      viewIndicator.addView(iv);
    }
  }
  
  @Override
  protected void onResume() {
    super.onResume();
    //activity啟動兩秒鐘后,發(fā)送一個message,用來將viewPager中的圖片切換到下一個
    mHandler.sendEmptyMessageDelayed(1, 2000);
  }
  
  @Override
  protected void onStop() {
    super.onStop();
    //停止viewPager中圖片的自動切換
    mHandler.removeMessages(1);
  }

  public class ViewPagerAdapter extends PagerAdapter {
    private List<View> mData;
    public ViewPagerAdapter(List<View> mData) {
      this.mData = mData;
    }

    @Override
    public int getCount() {
      return mData.size();
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
      return arg0 == arg1;
    }
    
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
      View v = mData.get(position);
      container.addView(v);
      return v;
    }
    
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
//  super.destroyItem(container, position, object);
      container.removeView(mData.get(position));
    }
    
  }
  
  private class ViewPageChangeListener implements OnPageChangeListener {

    @Override
    public void onPageScrollStateChanged(int arg0) {
    }

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

    //監(jiān)聽頁面改變事件來改變viewIndicator中的指示圖片
    @Override
    public void onPageSelected(int arg0) {
      int len = viewIndicator.getChildCount();
      for(int i = 0; i < len; ++i)
        viewIndicator.getChildAt(i).setBackgroundResource(R.drawable.tip_normal);
      viewIndicator.getChildAt(arg0).setBackgroundResource(R.drawable.tip_select);
    }
    
  }
  
  private Handler mHandler = new Handler() {
    public void handleMessage(android.os.Message msg) {
      switch(msg.what) {
      case 1:
        int totalcount = pagers.size();//autoChangeViewPager.getChildCount();
        int currentItem = autoChangeViewPager.getCurrentItem();
        
        int toItem = currentItem + 1 == totalcount ? 0 : currentItem + 1;
        
        Log.i(TAG, "totalcount: " + totalcount + "  currentItem: " + currentItem + "  toItem: " + toItem);
        
        autoChangeViewPager.setCurrentItem(toItem, true);
        
        //每兩秒鐘發(fā)送一個message,用于切換viewPager中的圖片
        this.sendEmptyMessageDelayed(1, 2000);
      }
    }
  };
}

布局文件如下:(上面代碼中的InvokedActivity非常簡單,此處就省略了)

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent" >

  <android.support.v4.view.ViewPager
    android:id="@+id/autoVP"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

  <LinearLayout
    android:id="@+id/vpindicator"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:orientation="horizontal" />

</FrameLayout>

相關(guān)文章

  • Android studio實(shí)現(xiàn)PopupWindow彈出框效果

    Android studio實(shí)現(xiàn)PopupWindow彈出框效果

    這篇文章主要為大家詳細(xì)介紹了Android studio實(shí)現(xiàn)PopupWindow彈出框效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Android Tiny集成圖片壓縮框架的使用

    Android Tiny集成圖片壓縮框架的使用

    本篇文章主要介紹了Android Tiny集成圖片壓縮框架的使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • Android?Gradle?三方依賴管理詳解

    Android?Gradle?三方依賴管理詳解

    這篇文章主要介紹了Android?Gradle?三方依賴管理詳解,Gradle的依賴管理是一個從開始接觸Android開發(fā)就一直伴隨著我們的問題,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-08-08
  • Android 中的注解深入探究

    Android 中的注解深入探究

    本文主要介紹 Android 注解這里提供了詳細(xì)的資料及示例代碼,有需要的小伙伴可以參考下
    2016-08-08
  • 解決EditText編輯時hint 在6.0 手機(jī)上顯示不出來的問題

    解決EditText編輯時hint 在6.0 手機(jī)上顯示不出來的問題

    下面小編就為大家?guī)硪黄鉀QEditText編輯時hint 在6.0 手機(jī)上顯示不出來的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Android編程調(diào)用Camera和相冊功能詳解

    Android編程調(diào)用Camera和相冊功能詳解

    這篇文章主要介紹了Android編程調(diào)用Camera和相冊功能,結(jié)合實(shí)例形式分析了Android的拍照及相冊調(diào)用功能相關(guān)實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下
    2017-02-02
  • Android dip,px,pt,sp 的區(qū)別詳解

    Android dip,px,pt,sp 的區(qū)別詳解

    本篇文章是對Android中dip,px,pt,sp的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • android自動生成dimens適配文件的圖文教程詳解(無需Java工具類)

    android自動生成dimens適配文件的圖文教程詳解(無需Java工具類)

    這篇文章主要介紹了android自動生成dimens適配文件,無需Java工具類,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • Android之日期及時間選擇對話框用法實(shí)例分析

    Android之日期及時間選擇對話框用法實(shí)例分析

    這篇文章主要介紹了Android之日期及時間選擇對話框用法,以實(shí)例形式較為詳細(xì)的分析了Android創(chuàng)建日期及時間選擇對話框的實(shí)現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • 詳解Android的Handler機(jī)制原理

    詳解Android的Handler機(jī)制原理

    Android的Handler機(jī)制是一種用于處理和調(diào)度線程之間消息傳遞的機(jī)制,通常用于在后臺線程中執(zhí)行任務(wù),并將結(jié)果返回到主線程中更新UI,Handler機(jī)制的核心是Message和MessageQueue,以及Looper,本文給大家詳細(xì)講解了Android的Handler機(jī)制原理,需要的朋友可以參考下
    2023-10-10

最新評論

黄平县| 道孚县| 福海县| 青铜峡市| 墨玉县| 天等县| 梧州市| 广宁县| 高阳县| 荥阳市| 内江市| 富蕴县| 台北县| 积石山| 二手房| 离岛区| 延川县| 洛南县| 东光县| 涿州市| 台北县| 涟源市| 滨州市| 丰顺县| 平山县| 平山县| 嫩江县| 肥西县| 鄂温| 辉南县| 轮台县| 深泽县| 汝城县| 托克逊县| 托克逊县| 新余市| 博客| 福建省| 东莞市| 庄河市| 响水县|