android实现轮播图
2015-07-29 12:19
483 查看
轮播图。。。这种玩意在各种各样的项目中经常会用到,今天我就在自己这边记录一个既支持手势滑动又支持自动轮播的,以后用到了就方便了:)
1.activity_main布局(slideshowview是自定义的控件,ViewPager这个是自带的控件,相信大家都知道;后面那个rlyt是图片的小白点):
<com.xx.xx.xxx.xx.SlideshowView
android:id="@+id/home_slideshow"
android:layout_width="fill_parent"
android:layout_height="150dp"
android:layout_alignLeft="@+id/rlyt_home_tag"
android:layout_below="@+id/rlyt_home_tag" />
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<RelativeLayout
android:id="@+id/main_content"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1" />
2.MainActivity.class
List<Integer> imgList=new ArrayList<Integer>();
imgList.add(R.drawable.one);
imgList.add(R.drawable.two);
imgList.add(R.drawable.three);
mSlideshowview=(SlideshowView) findViewById(R.id.home_slideshow);
mSlideshowview.setImageUris(imgList);
3.SlideshowView.class
public class SlideshowView extends FrameLayout {
private final boolean mIsAuto=true;
private List<Integer> mImageUris;
private List<ImageView> mImageViewsList;
private List<ImageView> mDotViewsList;
private LinearLayout mLinearLayout;
private ViewPager mViewPager;
private int mCurrentItem=0;//初始页卡
private ScheduledExecutorService mScheduledExecutorService;
private Handler handler=new Handler (){
public void handleMessage(Message msg){
super.handleMessage(msg);
mViewPager.setCurrentItem(mCurrentItem);
}
};
public SlideshowView(Context context) {
this(context,null);
// TODO Auto-generated constructor stub
}
public SlideshowView(Context context, AttributeSet attrs) {
this(context, attrs,0);
// TODO Auto-generated constructor stub
}
public SlideshowView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
// TODO Auto-generated constructor stub
initUI(context);
if(!(mImageUris.size()<=0)){
Log.d("imgaesize","图片不存在");
setImageUris(mImageUris);
}
if(mIsAuto){
startPlay();
}
}
private void initUI(Context context) {
// TODO Auto-generated method stub
mImageViewsList=new ArrayList<ImageView>();
mDotViewsList=new ArrayList<ImageView>();
mImageUris=new ArrayList<Integer>();
LayoutInflater.from(context).inflate(R.layout.slideshow_show,this,true);
mLinearLayout=(LinearLayout) findViewById(R.id.llyt_slideshow);
mViewPager=(ViewPager) findViewById(R.id.viewPager);
}
public void setImageUris(List<Integer> imageuris) {
// TODO Auto-generated method stub
for(int i=0;i<imageuris.size();i++){
mImageUris.add(imageuris.get(i));
}
//在代码中设置margin
LinearLayout.LayoutParams lp=new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lp.setMargins(5, 0, 0, 0);
for(int i=0;i<mImageUris.size();i++){
ImageView imageView=new ImageView(getContext());
imageView.setScaleType(ScaleType.FIT_XY);//铺满全屏
imageView.setBackgroundResource((int)imageuris.get(i));
mImageViewsList.add(imageView);
ImageView imagedot=new ImageView(getContext());
if(i==0){
imagedot.setBackgroundResource(R.drawable.main_dot_white);
}else{
imagedot.setBackgroundResource(R.drawable.main_dot_light);
}
imagedot.setLayoutParams(lp);
mDotViewsList.add(imagedot);
mLinearLayout.addView(imagedot);
}
mViewPager.setFocusable(true);
mViewPager.setAdapter(new MyPagerAdapter());
mViewPager.setOnPageChangeListener(new MyPageChangeListener());
}
private void startPlay(){
mScheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
mScheduledExecutorService.scheduleAtFixedRate(new SlideShowTask(), 1, 4, TimeUnit.SECONDS);
}
@SuppressWarnings("unused")
private void stopPlay(){
mScheduledExecutorService.shutdown();
}
/**
* 设置选中的tip的背景
* @param selectItems
*/
private void setImageBackground(int selectItems){
for(int i=0; i<mDotViewsList.size(); i++){
if(i == selectItems){
mDotViewsList.get(i).setBackgroundResource(R.drawable.main_dot_white);
}else{
mDotViewsList.get(i).setBackgroundResource(R.drawable.main_dot_light);
}
}
}
private class MyPagerAdapter extends PagerAdapter{
@Override
public void destroyItem(View container, int position, Object object) {
// TODO Auto-generated method stub
//((ViewPag.er)container).removeView((View)object);
((ViewPager)container).removeView(mImageViewsList.get(position));
}
@Override
public Object instantiateItem(View container, int position) {
// TODO Auto-generated method stub
((ViewPager)container).addView(mImageViewsList.get(position));
return mImageViewsList.get(position);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mImageViewsList.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0 == arg1;
}
@Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {
// TODO Auto-generated method stub
}
@Override
public Parcelable saveState() {
// TODO Auto-generated method stub
return null;
}
@Override
public void startUpdate(View arg0) {
// TODO Auto-generated method stub
}
@Override
public void finishUpdate(View arg0) {
// TODO Auto-generated method stub
}
}
private class MyPageChangeListener implements OnPageChangeListener{
boolean isAutoPlay = false;
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
switch (arg0) {
case 1:
isAutoPlay = false;
break;
case 2:
isAutoPlay = true;
break;
case 0:
if (mViewPager.getCurrentItem() == mViewPager.getAdapter().getCount() - 1 && !isAutoPlay) {
mViewPager.setCurrentItem(0);
}
else if (mViewPager.getCurrentItem() == 0 && !isAutoPlay) {
mViewPager.setCurrentItem(mViewPager.getAdapter().getCount() - 1);
}
break;
}
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageSelected(int pos) {
// TODO Auto-generated method stub
setImageBackground(pos % mImageUris.size());
}
}
private class SlideShowTask implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
synchronized (mViewPager) {
mCurrentItem = (mCurrentItem+1)%mImageViewsList.size();
handler.obtainMessage().sendToTarget();
}
}
}
private void destoryBitmaps() {
for (int i = 0; i < mImageViewsList.size(); i++) {
ImageView imageView = mImageViewsList.get(i);
Drawable drawable = imageView.getDrawable();
if (drawable != null) {
drawable.setCallback(null);
}
}
}
}
1.activity_main布局(slideshowview是自定义的控件,ViewPager这个是自带的控件,相信大家都知道;后面那个rlyt是图片的小白点):
<com.xx.xx.xxx.xx.SlideshowView
android:id="@+id/home_slideshow"
android:layout_width="fill_parent"
android:layout_height="150dp"
android:layout_alignLeft="@+id/rlyt_home_tag"
android:layout_below="@+id/rlyt_home_tag" />
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<RelativeLayout
android:id="@+id/main_content"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1" />
2.MainActivity.class
List<Integer> imgList=new ArrayList<Integer>();
imgList.add(R.drawable.one);
imgList.add(R.drawable.two);
imgList.add(R.drawable.three);
mSlideshowview=(SlideshowView) findViewById(R.id.home_slideshow);
mSlideshowview.setImageUris(imgList);
3.SlideshowView.class
public class SlideshowView extends FrameLayout {
private final boolean mIsAuto=true;
private List<Integer> mImageUris;
private List<ImageView> mImageViewsList;
private List<ImageView> mDotViewsList;
private LinearLayout mLinearLayout;
private ViewPager mViewPager;
private int mCurrentItem=0;//初始页卡
private ScheduledExecutorService mScheduledExecutorService;
private Handler handler=new Handler (){
public void handleMessage(Message msg){
super.handleMessage(msg);
mViewPager.setCurrentItem(mCurrentItem);
}
};
public SlideshowView(Context context) {
this(context,null);
// TODO Auto-generated constructor stub
}
public SlideshowView(Context context, AttributeSet attrs) {
this(context, attrs,0);
// TODO Auto-generated constructor stub
}
public SlideshowView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
// TODO Auto-generated constructor stub
initUI(context);
if(!(mImageUris.size()<=0)){
Log.d("imgaesize","图片不存在");
setImageUris(mImageUris);
}
if(mIsAuto){
startPlay();
}
}
private void initUI(Context context) {
// TODO Auto-generated method stub
mImageViewsList=new ArrayList<ImageView>();
mDotViewsList=new ArrayList<ImageView>();
mImageUris=new ArrayList<Integer>();
LayoutInflater.from(context).inflate(R.layout.slideshow_show,this,true);
mLinearLayout=(LinearLayout) findViewById(R.id.llyt_slideshow);
mViewPager=(ViewPager) findViewById(R.id.viewPager);
}
public void setImageUris(List<Integer> imageuris) {
// TODO Auto-generated method stub
for(int i=0;i<imageuris.size();i++){
mImageUris.add(imageuris.get(i));
}
//在代码中设置margin
LinearLayout.LayoutParams lp=new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
lp.setMargins(5, 0, 0, 0);
for(int i=0;i<mImageUris.size();i++){
ImageView imageView=new ImageView(getContext());
imageView.setScaleType(ScaleType.FIT_XY);//铺满全屏
imageView.setBackgroundResource((int)imageuris.get(i));
mImageViewsList.add(imageView);
ImageView imagedot=new ImageView(getContext());
if(i==0){
imagedot.setBackgroundResource(R.drawable.main_dot_white);
}else{
imagedot.setBackgroundResource(R.drawable.main_dot_light);
}
imagedot.setLayoutParams(lp);
mDotViewsList.add(imagedot);
mLinearLayout.addView(imagedot);
}
mViewPager.setFocusable(true);
mViewPager.setAdapter(new MyPagerAdapter());
mViewPager.setOnPageChangeListener(new MyPageChangeListener());
}
private void startPlay(){
mScheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
mScheduledExecutorService.scheduleAtFixedRate(new SlideShowTask(), 1, 4, TimeUnit.SECONDS);
}
@SuppressWarnings("unused")
private void stopPlay(){
mScheduledExecutorService.shutdown();
}
/**
* 设置选中的tip的背景
* @param selectItems
*/
private void setImageBackground(int selectItems){
for(int i=0; i<mDotViewsList.size(); i++){
if(i == selectItems){
mDotViewsList.get(i).setBackgroundResource(R.drawable.main_dot_white);
}else{
mDotViewsList.get(i).setBackgroundResource(R.drawable.main_dot_light);
}
}
}
private class MyPagerAdapter extends PagerAdapter{
@Override
public void destroyItem(View container, int position, Object object) {
// TODO Auto-generated method stub
//((ViewPag.er)container).removeView((View)object);
((ViewPager)container).removeView(mImageViewsList.get(position));
}
@Override
public Object instantiateItem(View container, int position) {
// TODO Auto-generated method stub
((ViewPager)container).addView(mImageViewsList.get(position));
return mImageViewsList.get(position);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mImageViewsList.size();
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0 == arg1;
}
@Override
public void restoreState(Parcelable arg0, ClassLoader arg1) {
// TODO Auto-generated method stub
}
@Override
public Parcelable saveState() {
// TODO Auto-generated method stub
return null;
}
@Override
public void startUpdate(View arg0) {
// TODO Auto-generated method stub
}
@Override
public void finishUpdate(View arg0) {
// TODO Auto-generated method stub
}
}
private class MyPageChangeListener implements OnPageChangeListener{
boolean isAutoPlay = false;
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
switch (arg0) {
case 1:
isAutoPlay = false;
break;
case 2:
isAutoPlay = true;
break;
case 0:
if (mViewPager.getCurrentItem() == mViewPager.getAdapter().getCount() - 1 && !isAutoPlay) {
mViewPager.setCurrentItem(0);
}
else if (mViewPager.getCurrentItem() == 0 && !isAutoPlay) {
mViewPager.setCurrentItem(mViewPager.getAdapter().getCount() - 1);
}
break;
}
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
@Override
public void onPageSelected(int pos) {
// TODO Auto-generated method stub
setImageBackground(pos % mImageUris.size());
}
}
private class SlideShowTask implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
synchronized (mViewPager) {
mCurrentItem = (mCurrentItem+1)%mImageViewsList.size();
handler.obtainMessage().sendToTarget();
}
}
}
private void destoryBitmaps() {
for (int i = 0; i < mImageViewsList.size(); i++) {
ImageView imageView = mImageViewsList.get(i);
Drawable drawable = imageView.getDrawable();
if (drawable != null) {
drawable.setCallback(null);
}
}
}
}
相关文章推荐
- Android 讲义第二版 ViewSwitcher + GestureDetector 练习
- AndroidStudio的一些使用问题
- Android文件前有红色感叹号
- 变化Android系统属性SystemProperties.set("sys.powerctl", "shutdown")关机分析
- android系统如何获得外置卡路径
- Android之项目推荐使用的第三方库
- Android开发之adb命令
- Android:Layout_weight的深刻理解
- android 字符串string
- (转)Android新的menu实现——ActionMode
- android 休眠唤醒机制分析(一)----wake_lock (自用 学习记录)
- android项目引入三方类库配置文件
- robotium+ant+android-junit-report
- Android之TelephonyManager类的方法详解
- Android4.0系统接收不到广播的问题解析
- Android 获取手机IMEI方法
- Android中的复制粘贴
- android javax.net.ssl.SSLPeerUnverifiedException: No peer certificate
- Robotium in Android Studio
- iOS- iOS 和 Android 的后台推送原理各是什么?有什么区别?