在androID移动端的开发中,首页轮播图是一个特别常见的功能,所以今天就来将最近写的一个小demo记录一下。
首先当然是新建一个项目代码如下:
activity_main.xml文件:
<?xml version="1.0" enCoding="utf-8"?><relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:tools="http://schemas.androID.com/tools" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" tools:context="com.yzp.vIEwpagedemo.MainActivity" androID:background="#f6f6f6"> <!--轮播图--> <relativeLayout androID:ID="@+ID/topPanel_vpg" androID:layout_wIDth="match_parent" androID:layout_height="190dp" > <androID.support.v4.vIEw.VIEwPager androID:ID="@+ID/VIEwPage_Detail" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:flipInterval="30" androID:persistentDrawingCache="animation" /> <linearLayout androID:ID="@+ID/point_detail" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_gravity="center" androID:orIEntation="horizontal" androID:layout_centerHorizontal="true" androID:layout_alignParentBottom="true" > </linearLayout> </relativeLayout></relativeLayout>
MainActivity
package com.yzp.vIEwpagedemo;import androID.content.Context;import androID.os.Handler;import androID.os.Message;import androID.support.v4.vIEw.VIEwPager;import androID.support.v7.app.AppCompatActivity;import androID.os.Bundle;import androID.vIEw.VIEw;import androID.Widget.ImageVIEw;import androID.Widget.linearLayout;import java.util.ArrayList;public class MainActivity extends AppCompatActivity { private VIEwPager VIEwPage_Detail; private linearLayout point_detail; private Context context; private VIEw vIEw; //轮播图图片资源 private final int[] vIEwpage_images = {R.mipmap.two,R.mipmap.three,R.mipmap.four,R.mipmap.fifve}; private ArrayList<ImageVIEw> vIEwpage_imageList; //判断是否自动滚动VIEwPage private boolean isRunning = true; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); Instantiation(); } public voID Instantiation() { VIEwPage_Detail = (VIEwPager)findVIEwByID(R.ID.VIEwPage_Detail); point_detail = (linearLayout)findVIEwByID(R.ID.point_detail); //初始化图片资源 vIEwpage_imageList = new ArrayList<ImageVIEw>(); for (int i : vIEwpage_images) { // 初始化图片资源 ImageVIEw imageVIEw = new ImageVIEw(this); imageVIEw.setBackgroundResource(i); vIEwpage_imageList.add(imageVIEw); // 添加指示小点 ImageVIEw point = new ImageVIEw(this); linearLayout.LayoutParams params = new linearLayout.LayoutParams(15,15); params.rightmargin = 10; params.bottommargin = 15; point.setLayoutParams(params); point.setBackgroundResource(R.mipmap.light_blue_point); if (i == R.mipmap.two) { //默认聚焦在第一张 point.setBackgroundResource(R.mipmap.blue_point); point.setEnabled(true); } else { point.setEnabled(false); } point_detail.addVIEw(point); } //首页轮播 CarouselShow carouselShow = new CarouselShow(context,vIEwpage_imageList); carouselShow.CarouselShow_Info_Detail(this); handler.sendEmptyMessageDelayed(0,3000); } private Handler handler = new Handler() { public voID handleMessage(Message msg) { // 执行滑动到下一个页面 VIEwPage_Detail.setCurrentItem(VIEwPage_Detail.getCurrentItem() + 1); if (isRunning) { // 在发一个handler延时 handler.sendEmptyMessageDelayed(0,3000); } } }; @OverrIDe public voID onDestroy() { // 停止滚动 isRunning = false; super.onDestroy(); }}
CarouselShow类(轮播功能实现):
package com.yzp.vIEwpagedemo;import androID.content.Context;import androID.support.v4.vIEw.VIEwPager;import androID.Widget.ImageVIEw;import androID.Widget.linearLayout;import java.util.ArrayList;/** * 轮播展示公共类 * 作者: yzp on 2016-09-07. * E-mail: [email protected] * QQ: 486492302 */public class CarouselShow { private final Context context; private linearLayout point_group; private ArrayList<ImageVIEw> vIEwpage_imageList; protected int lastposition = 0; private VIEwPager VIEwPage_Detail; private linearLayout point_detail; public CarouselShow(Context context,ArrayList<ImageVIEw> vIEwpage_imageList) { this.context = context; this.vIEwpage_imageList = vIEwpage_imageList; } /** * 当需要多个轮播功能的时候 建立一个类来调用 并实现此方法 */ public voID CarouselShow_Info_Detail(MainActivity vIEw){ VIEwPage_Detail = (VIEwPager)vIEw.findVIEwByID(R.ID.VIEwPage_Detail); point_detail = (linearLayout) vIEw.findVIEwByID(R.ID.point_detail); VIEwPage_Detail.setAdapter(new TeaNetPageAdapter(vIEwpage_imageList)); // 设置当前vIEwPager的位置 VIEwPage_Detail.setCurrentItem(Integer.MAX_VALUE / 2 - (Integer.MAX_VALUE / 2 % vIEwpage_imageList.size())); VIEwPage_Detail.setonPagechangelistener(new VIEwPager.OnPagechangelistener() { @OverrIDe public voID onPageSelected(int position) { // 页面切换后调用, position是新的页面位置 // 实现无限制循环播放 position %= vIEwpage_imageList.size(); // 把当前点设置为true,将上一个点设为false;并设置point_group图标 point_detail.getChildAt(position).setEnabled(true); point_detail.getChildAt(position).setBackgroundResource(R.mipmap.blue_point);//设置聚焦时的图标样式 point_detail.getChildAt(lastposition).setEnabled(false); point_detail.getChildAt(lastposition).setBackgroundResource(R.mipmap.light_blue_point);//上一张恢复原有图标 lastposition = position; } @OverrIDe public voID onPageScrolled(int position,float positionOffset,int positionOffsetPixels) { } @OverrIDe public voID onPageScrollStateChanged(int state) { } }); }}
TeaNetPageAdapter(适配器):
package com.yzp.vIEwpagedemo;import androID.support.v4.vIEw.PagerAdapter;import androID.vIEw.VIEw;import androID.vIEw.VIEwGroup;import androID.Widget.ImageVIEw;import java.util.ArrayList;/** * 作者: yzp on 2016-09-07. * E-mail: [email protected] * QQ: 486492302 */public class TeaNetPageAdapter extends PagerAdapter { private ArrayList<ImageVIEw> vIEwpage_imageList; public TeaNetPageAdapter(ArrayList<ImageVIEw> vIEwpage_imageList) { this.vIEwpage_imageList = vIEwpage_imageList; } // 需要实现以下四个方法 @OverrIDe public int getCount() { return Integer.MAX_VALUE; } @OverrIDe public boolean isVIEwFromObject(VIEw vIEw,Object object) { // 判断vIEw和Object对应是否有关联关系 if (vIEw == object) { return true; } else { return false; } } @OverrIDe public Object instantiateItem(VIEwGroup container,int position) { // 获得相应位置上的vIEw; container vIEw的容器,其实就是vIEwpage自身,// position: vIEwpager上的位置 // 给container添加内容 container.addVIEw(vIEwpage_imageList.get(position % vIEwpage_imageList.size())); return vIEwpage_imageList.get(position % vIEwpage_imageList.size()); } @OverrIDe public voID destroyItem(VIEwGroup container,int position,Object object) { // 销毁对应位置上的Object // super.destroyItem(container,position,object); container.removeVIEw((VIEw) object); object = null; }}
简单的几个类,首页轮播的功能就实现了,不过主类的图片资源就没有贴出来了,到时候可以自己下载几张图片,贴到mipmap文件夹下就OK了。
效果图展示:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
您可能感兴趣的文章:Android自定义控件实现简单的轮播图控件Android自定义控件实现优雅的广告轮播图Android ViewPager实现轮播图效果Android如何使用RecyclerView打造首页轮播图Android实现基于ViewPager的无限循环自动播放带指示器的轮播图CarouselFigureView控件Android开发在轮播图片上加入点击事件的方法Android实现轮播图无限循环效果Android下拉刷新与轮播图滑动冲突解决方案Android实现自定义轮播图片控件示例Android中用RxJava和ViewPager实现轮播图 总结以上是内存溢出为你收集整理的Android实现ViewPage轮播图效果全部内容,希望文章能够帮你解决Android实现ViewPage轮播图效果所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)