import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import android.content.Context;
import android.os.Handler;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
public class HeadAD extends RelativeLayout {
private ViewPager vp;
private LinearLayout symbolLayout, bottomLayout;
private LayoutParams lp;
// private ArrayList<imageview> symbolViews;
private List<viewpagerbean> showResults;
private boolean isContinue = true ;
private int currentItem = 0 ; // 当前图片的索引号
private ScheduledExecutorService updateService;
private Context context;
public void initData(List<viewpagerbean> pResult) {
showResults = pResult;
}
public HeadAD(Context context, AttributeSet attrs) {
super (context, attrs);
this .context = context;
// setBackgroundResource(R.color.black);
}
public void initView(Context context) {
// TODO Auto-generated method stub
lp = new LayoutParams(LayoutParams.MATCH_PARENT, DensityUtil.dip2px(
context, 180 ));
vp = new ViewPager(context);
vp.setLayoutParams(lp);
lp = new LayoutParams(LayoutParams.MATCH_PARENT, DensityUtil.dip2px(
context, 20 ));
lp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
bottomLayout = new LinearLayout(context);
bottomLayout.setGravity(Gravity.CENTER);
bottomLayout.setOrientation(LinearLayout.VERTICAL);
bottomLayout.setLayoutParams(lp);
bottomLayout.setBackgroundResource(R.color.footerBg);
lp = new LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.WRAP_CONTENT);
symbolLayout = new LinearLayout(context);
symbolLayout.setGravity(Gravity.CENTER);
symbolLayout.setOrientation(LinearLayout.HORIZONTAL);
symbolLayout.setPadding( 0 , 0 , 5 , 5 );
ImageView symbolIv;
for ( int i = 0 ; i < showResults.size(); i++) {
if (showResults.size() > 1 ) {
symbolIv = new ImageView(context);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
params.rightMargin = 10 ;
symbolIv.setBackgroundResource(R.drawable.point_bg);
symbolIv.setEnabled( false );
if (i == 0 ) {
symbolIv.setEnabled( true );
} else {
symbolIv.setEnabled( false );
}
symbolIv.setLayoutParams(params);
symbolLayout.addView(symbolIv);
}
}
bottomLayout.addView(symbolLayout);
adapter = new ViewPagerAdapter(context, showResults);
vp.setAdapter(adapter);
vp.setOnTouchListener( new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
isContinue = false ;
break ;
case MotionEvent.ACTION_MOVE:
isContinue = false ;
break ;
case MotionEvent.ACTION_UP:
isContinue = true ;
break ;
case MotionEvent.ACTION_CANCEL:
break ;
}
return false ;
}
});
vp.setOnPageChangeListener( new MyPageChangeListener());
addView(vp);
addView(bottomLayout);
}
private Handler viewPagerHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
vp.setCurrentItem(currentItem % showResults.size()); // 切换当前显示的图片
};
};
public ViewPagerAdapter adapter;
// 直接在activity的OnResume里调用,当前界面是该activity时开始循环
public void startUpdate() {
this .updateService = Executors.newSingleThreadScheduledExecutor();
this .updateService.scheduleAtFixedRate( new ScrollTask(), 5 , 5 ,
TimeUnit.SECONDS);
}
// 直接在activity的OnPause里调用,当前界面不是该activity时停止循环
public void stopUpdate() {
this .updateService.shutdown();
updateService = null ;
}
/**
* 当ViewPager中页面的状态发生改变时调用
*
*
*/
private class MyPageChangeListener implements OnPageChangeListener {
private int oldPosition = 0 ;
public void onPageSelected( int position) {
currentItem = position % showResults.size();
symbolLayout.getChildAt(oldPosition).setEnabled( false );
symbolLayout.getChildAt(position).setEnabled( true );
oldPosition = position;
}
public void onPageScrollStateChanged( int arg0) {
}
public void onPageScrolled( int arg0, float arg1, int arg2) {
}
}
/**
* 换行切换任务
*
* @author Administrator
*
*/
private class ScrollTask implements Runnable {
public void run() {
if (isContinue) {
synchronized (vp) {
System.out.println( "currentItem: " + currentItem);
currentItem = (currentItem + 1 ) % showResults.size();
viewPagerHandler.obtainMessage().sendToTarget(); // 通过Handler切换图片
}
}
}
}
} </viewpagerbean></viewpagerbean></imageview> |
HEADAD 实现了自定轮播计时。
下面看adapter写法 删除了部分项目逻辑
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
import java.util.List;
import android.content.Context;
import android.content.Intent;
import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
/******************************************************* *
*
********************************************************/
public class ViewPagerAdapter extends PagerAdapter {
List<viewpagerbean> lists;
Context ct;
private ImageView imgView;
private int currentPosition = 0 ;
private DisplayImageOptions options;
public ViewPagerAdapter(Context ct, List<viewpagerbean> mList) {
lists = mList;
this .ct = ct;
options = new DisplayImageOptions.Builder().cacheInMemory( true )
.cacheOnDisk( true )
.showImageOnLoading(R.drawable.default_news_logo).build();
}
/**
* 获得页面的总数
*/
public int getCount() {
return lists.size();
}
/**
* 获得相应位置上的view container view的容器
*/
public Object instantiateItem(ViewGroup container, final int position) {
// imgView.setOnClickListener(this);
imgView = new ImageView(ct);
imgView.setScaleType(ImageView.ScaleType.FIT_XY);
if (lists.size() == 0 ) {
} else {
//写自己的逻辑
currentPosition = position % lists.size();
}
// 给 container 添加一个view
container.addView(imgView);
// 返回一个和该view相对的object
return imgView;
}
/**
* 判断 view和object的对应关系
*/
public boolean isViewFromObject(View view, Object object) {
if (view == object) {
return true ;
} else {
return false ;
}
}
/**
* 销毁对应位置上的object
*/
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
object = null ;
}
@Override
public int getItemPosition(Object object) {
// TODO Auto-generated method stub
return super .getItemPosition(object);
}
} </viewpagerbean></viewpagerbean> |
实体bean这里就不贴了
用到工具类 ......还有几个不重要就不贴了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import android.content.Context;
public class DensityUtil {
/**
* 根据手机的分辨率从 dip 的单位 转成为 px(像素)
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return ( int ) (dpValue * scale + 0 .5f);
}
/**
* 根据手机的分辨率从 px(像素) 的单位 转成为 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return ( int ) (pxValue / scale + 0 .5f);
}
} |
如何调用:
1
2
3
|
mViewPager = new HeadAD(getActivity(), null );
mViewPager.initData(viewPagerLists);
mViewPager.initView(getActivity());
|
就这样就OK了。