自定义图片轮播,简单就是好用,自定义图片轮播
图片轮播是一种常见的自定义控件,也有多种实现的方法,这里提供一种简单的ViewPager实现的案例。
实现功能:图片循环轮播,进度显示,图片点击事件
实现只需三步:
1 添加类文件到项目中。
2 在xml布局中引入标签。
3 实例化并设置简单参数。
具体使用方法,详见代码注释。
==================================================================
自定义java文件
package com.dashou.viewpagerimage;
import android.content.Context;
import android.graphics.Color;
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.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import org.xutils.image.ImageOptions;
import org.xutils.x;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* 自定义图片轮播控件
* 使用方法:
* 1 在xml布局中引入本包名,并设置ID,代码类中实例化此类对象。
* 2 通过setViewPager()方法设置参数(int size, List<Map<String, Object>> list)
* size是轮播图片的数量,list需要存入图片的url地址
* 3 设置此控件的监听事件
* 注意:Demo使用xutils请求网络
* Created by dashou on 2016/3/23.
*/
public class MyViewPager extends RelativeLayout implements View.OnTouchListener, ViewPager.OnPageChangeListener {
private ViewPager viewPager;
//放置圆点图片的布局
private LinearLayout image;
//设置图片填充方式
public ImageView.ScaleType setScaleType = ImageView.ScaleType.FIT_XY;
//存储图片url以及点击事件需要的id等数据
private List<Map<String, Object>> list;
private OnViewPagerClickListener onViewPagerClickListener;
private int num;
private int index_img = 0;
public long time = 3000;//设置循环间隔时间
private boolean isContinue = true;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
index_img++;
viewPager.setCurrentItem(index_img);
}
};
public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
/**
* 初始化控件
*/
private void init() {
viewPager = new ViewPager(getContext());
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT);
addView(viewPager, lp);
image = new LinearLayout(getContext());
image.setOrientation(LinearLayout.HORIZONTAL);
image.setGravity(Gravity.CENTER_VERTICAL);
RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(200, 50);
rlp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
rlp.addRule(RelativeLayout.CENTER_HORIZONTAL);
addView(image, rlp);
}
/**
* 设置ViewPager
*/
public void setViewPager(int size, List<Map<String, Object>> list) {
this.list = list;
num = size;
addDots(size);
List<View> views = new ArrayList<View>();
for (int i = 0; i < size; i++) {
ImageView img = new ImageView(getContext());
img.setScaleType(setScaleType);
views.add(img);
}
MyViewPagerAdapter adapter = new MyViewPagerAdapter(getContext(), views);
viewPager.setAdapter(adapter);
viewPager.addOnPageChangeListener(this);
viewPager.setOnTouchListener(this);
startContinue();
}
/**
* 添加进度显示
*
* @param size
*/
private void addDots(int size) {
for (int i = 0; i < size; i++) {
LinearLayout.LayoutParams dot_lp=new LinearLayout.LayoutParams(5,30);
dot_lp.width=0;
dot_lp.weight = 1.0f;
TextView tv = new TextView(getContext());
if (i==0){
tv.setText(i+1+"");
tv.setTextColor(Color.RED);
}else {
tv.setText(i+1+"");
tv.setTextColor(Color.BLUE);
}
image.addView(tv,dot_lp);
}
}
//重置图片状态按钮
private void resetDots(int id){
for (int i = 0; i < list.size(); i++) {
((TextView)(image.getChildAt(i))).setTextColor(Color.BLUE);
}
((TextView)(image.getChildAt(id))).setTextColor(Color.RED);
}
@Override
public boolean onTouch(View v, MotionEvent event) {
&nbs