欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android ViewPager实现图片轮翻效果

程序员文章站 2024-02-19 21:54:40
很多app都有这种效果,特别一些电商类的app,顶部每隔几秒钟会向右翻页显示下张图片,用来作推广或者内容展示用的。今天来简单地模仿一下,还自带一个自动跳动的小功能(底部有几...

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

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