Android 实现图片无限轮播
2018-03-16 15:07
267 查看
这是一个在好久之前我遇到的问题,我的解决方法是自定义了一个viewpager, 在内部实现功能,再给出一个接口,实现viewpager滚动时按钮的变化
这是布局,如果包名不同,请更改
这是工具类
这是我在实际中的使用这里传出的temp,是图片现在轮播到了第几个,你可以根据这个数值去设置你的一群小黑点现在该处于什么状态了
这是布局,如果包名不同,请更改
<com.chunni.android.chunni.tool.Scroller android:layout_width="match_parent" android:layout_height="270dp" android:id="@+id/viewpager" android:background="@color/white"/>
这是工具类
package com.chunni.android.chunni.tool; import android.content.Context; import android.os.Handler; import android.os.Message; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewParent; import android.widget.LinearLayout; import android.widget.RelativeLayout; import com.chunni.android.chunni.R; import java.util.ArrayList; import java.util.Timer; import java.util.TimerTask; /** * Created by rtyui on 2018/3/5. */ public class Scroller extends ViewPager { //要滚动的一组view private ArrayList<View> views = null; //标记现在是不是需要滚动 private boolean NEEDSCROLL = true; //一次需要的时间 private int timeSecond; //接收信号,如果有信号了就滚动 private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); setCurrentItem(getCurrentItem() + 1); } }; /** * 设置滚动的页面,设置完之后,开始 * @param views */ public void setViews(final ArrayList<View> views) { this.views = views; setAdapter(new PagerAdapter() { @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { position %= views.size(); if (position < 0) { position += views.size(); } View view = views.get(position); ViewParent vp = view.getParent(); if (vp != null) { ViewGroup parent = (ViewGroup) vp; parent.removeView(view); } container.addView(view); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { } }); addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { int temp = position % views.size(); System.out.println(temp); onChange.change(temp); } @Override public void onPageScrollStateChanged(int state) { if (state == 1){ NEEDSCROLL = false; } } }); setCurrentItem(Integer.MAX_VALUE / 2 - Integer.MAX_VALUE / 2 % views.size()); Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { if (NEEDSCROLL){ handler.sendEmptyMessage(100002); }else{ NEEDSCROLL = true; } } }, timeSecond * 1000 , timeSecond * 1000); } //定义接口 public interface OnChange{ void change(int temp); } //实例化接口 private OnChange onChange; //设置接口 public void setOnChange(OnChange onChange, int timeSecond) { this.onChange = onChange; this.timeSecond = timeSecond; } //构造函数,用于布局时构造 public Scroller(Context context, AttributeSet attrs) { super(context, attrs); } }
这是我在实际中的使用这里传出的temp,是图片现在轮播到了第几个,你可以根据这个数值去设置你的一群小黑点现在该处于什么状态了
scroller = linearLayout.findViewById(R.id.viewpager); scroller.setOnChange(new Scroller.OnChange() { @Override public void change(int temp) { for (int i = 0; i < 3; i++){ if (i == temp) btns.get(i).setBackgroundResource(R.drawable.index_point_bg1); else btns.get(i).setBackgroundResource(R.drawable.index_point_bg0); } } }, 4);
相关文章推荐
- Android使用自定义控件实现加载本地图片无限轮播
- Android使用自定义控件实现加载网络图片无限轮播
- Android自定义View实现自动无限轮播,点击图片进入详情页
- Android实现广告页图片无限轮播
- Android ViewPager从网络获取图片实现无限轮播
- Android实现图片自动轮播并且支持手势左右无限滑动
- Android图片无限轮播的实现代码
- Android实现广告页图片无限轮播
- Android实现图片自动轮播并且支持手势左右无限滑动
- Android-图片选择,压缩,上传,加载 的实例(图片上传(多图也可),服务器端实现,图片加载(图片轮播实现))
- Android实现Banner图片循环轮播
- Android事件分发学习应用-图片轮播实现
- 图片无限轮播-最简单的实现方法
- Android图片轮播效果的几种实现方法
- iOS开发之ImageView复用实现图片无限轮播
- Android开发之使用viewpager实现图片轮播(二)
- android ViewPager实现的轮播图广告自定义视图,网络获取图片和数据
- Android实现Banner界面广告图片循环轮播(包括实现手动滑动循环)
- Android ViewPager控件实现图片轮播
- Android实现Banner界面广告图片循环轮播(包括实现手动滑动循环)