Android ViewPager實(shí)現(xiàn)圖片輪翻效果
很多App都有這種效果,特別一些電商類(lèi)的App,頂部每隔幾秒鐘會(huì)向右翻頁(yè)顯示下張圖片,用來(lái)作推廣或者內(nèi)容展示用的。今天來(lái)簡(jiǎn)單地模仿一下,還自帶一個(gè)自動(dòng)跳動(dòng)的小功能(底部有幾個(gè)小點(diǎn),圖片移動(dòng)的時(shí)候,點(diǎn)的狀態(tài)也在變化),用定時(shí)器來(lái)實(shí)現(xiàn)不難。
import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.os.SystemClock; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.LinearLayout.LayoutParams; import android.widget.TextView; public class MainActivity extends Activity implements OnPageChangeListener { protected static final String TAG = "MainActivity"; private List<ImageView> imageViewList; private ViewPager mViewPager; private final int[] imageResIDs = { R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e }; private final String[] imageDescriptions = { "鞏俐不低俗,我就不能低俗", "撲樹(shù)又回來(lái)啦!再唱經(jīng)典老歌引萬(wàn)人大合唱", "揭秘北京電影如何升級(jí)", "樂(lè)視網(wǎng)TV版大派送", "熱血屌絲的反殺" }; private TextView tvImageDescription; // 圖片描述 private LinearLayout llPointGroup; // 點(diǎn)控件的組 private int previousPosition = 0; // viewpager選中的前一個(gè)position private boolean isStop = false; // 控制循環(huán)的子線程是否停止 private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); new Thread(new Runnable() { @Override public void run() { // 每?jī)擅腌娤蛑骶€程發(fā)送一條消息, 切換viewpager的界面 while(!isStop) { SystemClock.sleep(2000); handler.sendEmptyMessage(0); } Log.i(TAG, "循環(huán)線程停止了"); }}).start(); } @Override protected void onDestroy() { isStop = true; super.onDestroy(); } private void initView() { mViewPager = (ViewPager) findViewById(R.id.viewpager); llPointGroup = (LinearLayout) findViewById(R.id.ll_point_group); tvImageDescription = (TextView) findViewById(R.id.tv_image_description); imageViewList = new ArrayList<ImageView>(); ImageView iv; View pointView; LayoutParams params; for (int i = 0; i < imageResIDs.length; i++) { iv = new ImageView(this); iv.setBackgroundResource(imageResIDs[i]); imageViewList.add(iv); // 根據(jù)圖片添加點(diǎn) pointView = new View(this); params = new LayoutParams(5, 5); params.leftMargin = 5; pointView.setLayoutParams(params); pointView.setEnabled(false); pointView.setBackgroundResource(R.drawable.point_bg); llPointGroup.addView(pointView); } MyPagerAdapter mAdapter = new MyPagerAdapter(); mViewPager.setAdapter(mAdapter); mViewPager.setOnPageChangeListener(this); int item = (Integer.MAX_VALUE / 2) - ((Integer.MAX_VALUE / 2) % imageViewList.size()); mViewPager.setCurrentItem(item); // 設(shè)置當(dāng)前選中的item的position tvImageDescription.setText(imageDescriptions[previousPosition]); llPointGroup.getChildAt(previousPosition).setEnabled(true); // 第一點(diǎn)被選中 } class MyPagerAdapter extends PagerAdapter { @Override public int getCount() { return Integer.MAX_VALUE; } /** * 移動(dòng)的對(duì)象和進(jìn)來(lái)的對(duì)象如果是同一個(gè)就返回true, 代表復(fù)用view對(duì)象 * false 使用object對(duì)象 */ @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == arg1; } /** * 需要銷(xiāo)毀的對(duì)象的position傳進(jìn)來(lái) */ @Override public void destroyItem(ViewGroup container, int position, Object object) { // 移除掉指定position的對(duì)象 mViewPager.removeView(imageViewList.get(position % imageViewList.size())); } /** * 加載position位置的view對(duì)象 */ @Override public Object instantiateItem(ViewGroup container, int position) { // 添加指定position的對(duì)象 mViewPager.addView(imageViewList.get(position % imageViewList.size())); return imageViewList.get(position % imageViewList.size()); } } @Override public void onPageScrollStateChanged(int arg0) { // TODO Auto-generated method stub } @Override public void onPageScrolled(int arg0, float arg1, int arg2) { // TODO Auto-generated method stub } /** * 當(dāng)viewpager頁(yè)面切換時(shí)回調(diào) * @param position 就是當(dāng)前顯示的page頁(yè) */ @Override public void onPageSelected(int position) { tvImageDescription.setText(imageDescriptions[position % imageViewList.size()]); llPointGroup.getChildAt(position % imageViewList.size()).setEnabled(true); llPointGroup.getChildAt(previousPosition).setEnabled(false); previousPosition = position % imageViewList.size(); } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android實(shí)現(xiàn)卡片翻轉(zhuǎn)動(dòng)畫(huà)
- Android自定義ViewPager實(shí)現(xiàn)縱向滑動(dòng)翻頁(yè)效果
- Android CardView+ViewPager實(shí)現(xiàn)ViewPager翻頁(yè)動(dòng)畫(huà)的方法
- Android?ViewPager實(shí)現(xiàn)左右滑動(dòng)翻頁(yè)效果
- android ViewPager實(shí)現(xiàn)滑動(dòng)翻頁(yè)效果實(shí)例代碼
- Android原生ViewPager控件實(shí)現(xiàn)卡片翻動(dòng)效果
相關(guān)文章
Android小程序?qū)崿F(xiàn)選項(xiàng)菜單
這篇文章主要為大家詳細(xì)介紹了Android小程序?qū)崿F(xiàn)選項(xiàng)菜單,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05Android實(shí)現(xiàn)水波紋效果實(shí)例代碼
大家好,本篇文章主要講的是Android實(shí)現(xiàn)水波紋效果實(shí)例代碼,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-02-02gradle配置國(guó)內(nèi)鏡像的實(shí)現(xiàn)
這篇文章主要介紹了gradle配置國(guó)內(nèi)鏡像的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09android判斷動(dòng)畫(huà)已結(jié)束示例代碼
添加一個(gè)動(dòng)畫(huà)效果,發(fā)現(xiàn)動(dòng)畫(huà)沒(méi)執(zhí)行完 就直接跳轉(zhuǎn)或者finish掉,添加動(dòng)畫(huà)監(jiān)聽(tīng)事件即可,示例代碼如下2014-10-10Android SoundPool實(shí)現(xiàn)簡(jiǎn)短小音效
這篇文章主要為大家詳細(xì)介紹了Android SoundPool實(shí)現(xiàn)簡(jiǎn)短小音效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11android中intent傳遞list或者對(duì)象的方法
這篇文章主要介紹了android中intent傳遞list或者對(duì)象的方法,分析羅列了常用的幾種方法,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-01-01Android編程實(shí)現(xiàn)使用webView打開(kāi)本地html文件的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)使用webView打開(kāi)本地html文件的方法,結(jié)合實(shí)例形式分析了Android中webview布局及打開(kāi)HTML文件的功能實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-02-02