自己写个轮播图效果

来源:互联网 发布:redis查看所有数据 编辑:程序博客网 时间:2024/06/03 20:36

每次都用banner都要导包,感觉好麻烦就自己尝试着写了一下,感觉还像那么回事,不喜勿喷,文明观文哈
首先就是布局文件用viewPager了,主页面:
FrameLayout
android:layout_width=”match_parent”
android:layout_height=”wrap_content”>

            <com.leevanie.xishanoa.widget.AutoScrollViewPager                android:id="@+id/home_viewpager"                android:layout_width="match_parent"                android:layout_height="@dimen/dp_150" />            <!--viewpager下方的指示器-->            <LinearLayout                android:id="@+id/home_viewpager_indicator"                android:layout_width="fill_parent"                android:layout_height="@dimen/dp_10"                android:layout_alignBottom="@+id/viewPager_main_list_slide"                android:layout_marginBottom="@dimen/dp_7"                android:layout_marginTop="@dimen/dp_120"                android:gravity="center"                android:orientation="horizontal" /> </FrameLayout>布局就这么简单啦,接下来就是java代码了

轮播图图片布局
LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:orientation=”vertical” android:layout_width=”match_parent”
android:layout_height=”match_parent”>

<ImageView    android:id="@+id/home_fragment_item_simpledraw"    android:layout_width="match_parent"    android:layout_height="match_parent" />


图片下面的小圆点布局
LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
android:orientation=”vertical” android:layout_width=”match_parent”
android:layout_height=”match_parent”>

<ImageView    android:id="@+id/imageView_indicator_dot"    android:layout_width="5dp"    android:layout_height="4dp"    android:layout_margin="3dp"    android:scaleType="centerCrop"/>


在MainActivity中
private HomeViewPagerAdapter homeViewPagerAdapter;
//做一个页面轮播的adapter
private PagerDotIndicator pagerDotIndicator;//这就是下面那几个小店点了,当然位置在布局文件里面可以自己设置的。homeViewPagerAdapter = new HomeViewPagerAdapter(getActivity());
pagerDotIndicator = new PagerDotIndicator(getActivity(), homeViewpagerIndicator, homeViewpager);
homeViewpager.setAdapter(homeViewPagerAdapter);
homeViewpager.setCurrentItem(3);
//我这里设置了三个页面,当然你也可以设置更多
pagerDotIndicator.setDotNums(3);
下面就是adapter适配的东西了
public class HomeViewPagerAdapter extends PagerAdapter {
private LayoutInflater inflater;
private int image[] = new int[]{R.mipmap.message_viewpager,
R.mipmap.message_viewpager,R.mipmap.message_viewpager};

public HomeViewPagerAdapter(Context context) {    inflater = LayoutInflater.from(context);}@Overridepublic int getCount() {    return Integer.MAX_VALUE;}@Overridepublic boolean isViewFromObject(View view, Object object) {    return view == object;}@Overridepublic Object instantiateItem(ViewGroup container, int position) {    View view = inflater.inflate(R.layout.home_fragment_viewpager_item, null);    ViewHolder holder = new ViewHolder(view);    holder.homeFragmentItemSimpledrawee.setImageResource(image[position % image.length]);    container.addView(view);    return view;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {    View view = inflater.inflate(R.layout.home_fragment_viewpager_item, null);    container.removeView(view);}class ViewHolder {    @BindView(R.id.home_fragment_item_simpledraw)    ImageView homeFragmentItemSimpledrawee;    ViewHolder(View view) {        ButterKnife.bind(this, view);    }}

}接下来就是小圆点的自定义类了,
public class PagerDotIndicator {
private LinearLayout indicatorContainer;
private ViewPager viewPager;
private LayoutInflater inflater;
private int normalDotRes;
private int selectedDotRes;

public PagerDotIndicator(Context context, final LinearLayout indicatorContainer, ViewPager viewPager){    this.indicatorContainer = indicatorContainer;    this.viewPager = viewPager;    this.inflater = LayoutInflater.from(context);    normalDotRes = R.mipmap.home_page_controls_nor;    selectedDotRes = R.mipmap.home_page_controls_hl;    viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){        @Override        public void onPageSelected(int position) {            super.onPageSelected(position);            for (int i = 0; i < indicatorContainer.getChildCount(); i++) {                ImageView imageView = (ImageView) indicatorContainer.getChildAt(i).findViewById(R.id.imageView_indicator_dot);                if (position % indicatorContainer.getChildCount() == i){                    imageView.setImageResource(selectedDotRes);                }else{                    imageView.setImageResource(normalDotRes);                }            }        }    });}/** * 外部可以设置指示器的图片资源(如果不设置就使用本类中默认的指示器图片) */public void setDotRes(int normalDotRes,int selectedDotRes){    this.normalDotRes = normalDotRes;    this.selectedDotRes = selectedDotRes;}/** * 设置指示器的个数 */public void setDotNums(int size){    for (int i = 0; i < size; i++) {        View view = inflater.inflate(R.layout.viewpager_indicator_dots,null);        ImageView imageView = (ImageView) view.findViewById(R.id.imageView_indicator_dot);        if (i == 0){            imageView.setImageResource(selectedDotRes);        }else{            imageView.setImageResource(normalDotRes);        }        indicatorContainer.addView(view);    }}

}
是不是很简单,没错就是这么简单,而且还不用导包的

0 0
原创粉丝点击