当前位置: 首页 > 编程笔记 >

Android ViewPager实现图片轮翻效果

万铭
2023-03-14
本文向大家介绍Android ViewPager实现图片轮翻效果,包括了Android ViewPager实现图片轮翻效果的使用技巧和注意事项,需要的朋友参考一下

很多App都有这种效果,特别一些电商类的App,顶部每隔几秒钟会向右翻页显示下张图片,用来作推广或者内容展示用的。今天来简单地模仿一下,还自带一个自动跳动的小功能(底部有几个小点,图片移动的时候,点的状态也在变化),用定时器来实现不难。

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 = { 
   "巩俐不低俗,我就不能低俗", 
   "扑树又回来啦!再唱经典老歌引万人大合唱", 
   "揭秘北京电影如何升级", 
   "乐视网TV版大派送", 
   "热血屌丝的反杀" 
 }; 
 private TextView tvImageDescription; // 图片描述 
 private LinearLayout llPointGroup;  // 点控件的组 
 private int previousPosition = 0;  // viewpager选中的前一个position 
 private boolean isStop = false; // 控制循环的子线程是否停止 
  
 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() { 
    // 每两秒钟向主线程发送一条消息, 切换viewpager的界面 
    while(!isStop) { 
     SystemClock.sleep(2000); 
      
     handler.sendEmptyMessage(0); 
    } 
    Log.i(TAG, "循环线程停止了"); 
   }}).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); 
    
   // 根据图片添加点 
   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);  // 设置当前选中的item的position 
   
  tvImageDescription.setText(imageDescriptions[previousPosition]); 
  llPointGroup.getChildAt(previousPosition).setEnabled(true); // 第一点被选中 
 } 
  
  
 class MyPagerAdapter extends PagerAdapter { 
 
  @Override 
  public int getCount() { 
   return Integer.MAX_VALUE; 
  } 
 
  /** 
   * 移动的对象和进来的对象如果是同一个就返回true, 代表复用view对象 
   * false 使用object对象 
   */ 
  @Override 
  public boolean isViewFromObject(View arg0, Object arg1) { 
   return arg0 == arg1; 
  } 
 
  /** 
   * 需要销毁的对象的position传进来 
   */ 
  @Override 
  public void destroyItem(ViewGroup container, int position, Object object) { 
   // 移除掉指定position的对象 
   mViewPager.removeView(imageViewList.get(position % imageViewList.size())); 
  } 
 
  /** 
   * 加载position位置的view对象 
   */ 
  @Override 
  public Object instantiateItem(ViewGroup container, int position) { 
   // 添加指定position的对象 
   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 
   
 } 
 
 /** 
  * 当viewpager页面切换时回调 
  * @param position 就是当前显示的page页 
  */ 
 @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(); 
 } 
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍js实现图片轮播效果,包括了js实现图片轮播效果的使用技巧和注意事项,需要的朋友参考一下 本文实例讲解了js实现图片轮播效果代码,分享给大家供大家参考,具体内容如下 运行代码如下 具体代码如下 插件是基于jQuery写的,主要实现的功能:自动播放、鼠标悬停、左右箭头控制+禁止点击 CSS样式: HTML布局( a标签最好加个title属性 ): JS脚本插件: 页面调用: 希望本文所

  • 本文向大家介绍JQuery实现图片轮播效果,包括了JQuery实现图片轮播效果的使用技巧和注意事项,需要的朋友参考一下 【原理简述】 这里大概说一下整个流程: 1,将除了第一张以外的图片全部隐藏, 2,获取第一张图片的alt信息显示在信息栏,并添加点击事件 3,为4个按钮添加点击侦听,点击相应的按钮,用fadeOut,fadeIn方法显示图片 4,设置setInterval,定时执行切换函数 【代

  • 本文向大家介绍JavaScript实现图片轮播特效,包括了JavaScript实现图片轮播特效的使用技巧和注意事项,需要的朋友参考一下 今天给大家介绍下怎么用 JS 实现图片轮播效果。 原理描述: 使用JS实现轮播的原理是这样的: 假设初始的情况,下图一个网格代表一个图,初始时,显示1 : 当进行一次轮播后,显示变为下图 显示2: 依次类推。 代码实现: 1 JS 代码: 2  HTML 代码:

  • 本文向大家介绍原生JS实现图片翻书效果,包括了原生JS实现图片翻书效果的使用技巧和注意事项,需要的朋友参考一下 下面给大家分享基于原生js实现的图片翻书效果,具体代码如下所示: 以上所述是小编给大家介绍的原生JS实现图片翻书效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对呐喊教程网站的支持!

  • 本文向大家介绍js图片轮播效果实现代码,包括了js图片轮播效果实现代码的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了js实现图片轮播效果的具体代码,供大家参考,具体内容如下 首先给大家看一看js图片轮播效果,如下图 具体思路: 一、页面加载、获取整个容器、所有放数字索引的li及放图片列表的ul、定义放定时器的变量、存放当前索引的变量index 二、添加定时器,每隔2秒钟index递

  • 本文向大家介绍js手动播放图片实现图片轮播效果,包括了js手动播放图片实现图片轮播效果的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了js图片轮播具体实现代码,供大家参考,具体内容如下 一、html代码部分(et.thtml): 二、css代码部分(styleet,css): 三、js代码部分(et.js): 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教