您的位置:首页 > 移动开发 > Android开发

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);

}

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: