全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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(); 
 } 
} 

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


# Android  # ViewPager  # 图片轮翻  # Android实现卡片翻转动画  # Android自定义ViewPager实现纵向滑动翻页效果  # Android CardView+ViewPager实现ViewPager翻页动画的方法  # Android ViewPager实现左右滑动翻页效果  # android ViewPager实现滑动翻页效果实例代码  # Android原生ViewPager控件实现卡片翻动效果  # 我就  # 都有  # 也在  # 万人  # 有几个  # 自带  # 来实现  # 每隔  # 北京  # 翻页  # 回调  # 几秒钟  # 大家多多  # 移除  # 复用  # 经典老歌  # 加载  # 视网  # 停止了  # private 


相关文章: 建站之星如何实现五合一智能建站与营销推广?  网站图片在线制作软件,怎么在图片上做链接?  网站制作知乎推荐,想做自己的网站用什么工具比较好?  建站之星如何保障用户数据免受黑客入侵?  英语简历制作免费网站推荐,如何将简历翻译成英文?  创业网站制作流程,创业网站可靠吗?  Swift中switch语句区间和元组模式匹配  建站主机系统SEO优化与智能配置核心关键词操作指南  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  建站之星后台密码如何安全设置与找回?  建站之星如何实现网站加密操作?  建站上市公司网站建设方案与SEO优化服务定制指南  C++时间戳转换成日期时间的步骤和示例代码  建站之星代理商如何保障技术支持与售后服务?  如何彻底删除建站之星生成的Banner?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  如何续费美橙建站之星域名及服务?  如何撰写建站申请书?关键要点有哪些?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  详解jQuery停止动画——stop()方法的使用  如何在阿里云购买域名并搭建网站?  网页设计与网站制作内容,怎样注册网站?  定制建站模板如何实现SEO优化与智能系统配置?18字教程  贸易公司网站制作流程,出口贸易网站设计怎么做?  威客平台建站流程解析:高效搭建教程与设计优化方案  广州营销型建站服务商推荐:技术优势与SEO优化解析  郑州企业网站制作公司,郑州招聘网站有哪些?  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  linux top下的 minerd 木马清除方法  内网网站制作软件,内网的网站如何发布到外网?  成都网站制作报价公司,成都工业用气开户费用?  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  魔方云NAT建站如何实现端口转发?  如何选择PHP开源工具快速搭建网站?  黑客如何利用漏洞与弱口令入侵网站服务器?  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  建站之星备案流程有哪些注意事项?  再谈Python中的字符串与字符编码(推荐)  制作证书网站有哪些,全国城建培训中心证书查询官网?  外汇网站制作流程,如何在工商银行网站上做外汇买卖?  已有域名和空间如何搭建网站?  清单制作人网站有哪些,近日“兴风作浪的姑奶奶”引起很多人的关注这是什么事情?  如何快速搭建高效WAP手机网站?  建站之星IIS配置教程:代码生成技巧与站点搭建指南  如何登录建站主机?访问步骤全解析  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  视频网站app制作软件,有什么好的视频聊天网站或者软件?  建站之星后台管理:高效配置与模板优化提升用户体验 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。