美文网首页
Android:轮播图广告

Android:轮播图广告

作者: 皮皮铭 | 来源:发表于2019-08-20 21:07 被阅读0次
    123.gif

    布局文件

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="250dp"
            tools:ignore="MissingConstraints">
    
            <android.support.v4.view.ViewPager
                android:id="@+id/vp"
                android:layout_width="match_parent"
                android:layout_height="match_parent" />
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:layout_alignParentBottom="true"
                android:background="#66000000"
                android:orientation="vertical">
    
                <TextView
                    android:id="@+id/tv"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center_horizontal"
                    android:paddingTop="5dp"
                    android:text="112212131313213"
                    android:textColor="#fff"
                    android:textSize="18dp" />
    
                <LinearLayout
                    android:id="@+id/dot"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="center"
                    android:layout_marginTop="10dp"
                    android:orientation="horizontal"/>
    
            </LinearLayout>
    
        </RelativeLayout>
    
    </android.support.constraint.ConstraintLayout>
    
    public class MainActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener {
        private ViewPager vp;
        private TextView tv;
        private LinearLayout dot;
        private int[] imgId;
        private ArrayList<ImageView> list;
        private View point;
        private String[] text;
        private int lastDot = 0;
        private int Max = Integer.MAX_VALUE;
        private boolean isrunning = false;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            initView();
            initData();
            initApater();
            //无限循环
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        isrunning = true;
                        while (isrunning){
                            Thread.sleep(2000);
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    //滑动到下一个页面
                                    vp.setCurrentItem(vp.getCurrentItem()+1);
                                }
                            });
                        }
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }
    
        private void initData() {
            //图片数组
            imgId = new int[]{R.drawable.q, R.drawable.w, R.drawable.e, R.drawable.r, R.drawable.t};
            //图片集合
            list = new ArrayList<>();
            //文本数组
            text = new String[]{"1", "2", "3", "4", "5"};
            LinearLayout.LayoutParams params;
            ImageView imageView;
            for (int i = 0; i < imgId.length; i++) {
                //添加图片
                imageView = new ImageView(this);
                imageView.setBackgroundResource(imgId[i]);
                list.add(imageView);
                //圆形点
                point = new View(this);
                point.setBackgroundResource(R.drawable.selector_bg_point);
                //设置小白点的宽高
                params = new LinearLayout.LayoutParams(20, 20);
                //除去第一个都添加左边距
                if (i != 0)
                    params.leftMargin = 10;
                //默认为灰色,false
                point.setEnabled(false);
                //在线性布局里面添加5个小白点
                dot.addView(point, params);
            }
        }
    
        private void initApater() {
            //第一个小白点设置为true
            dot.getChildAt(0).setEnabled(true);
            //第一个文字
            tv.setText(text[0]);
            vp.setAdapter(new MyAdapter());
            //向左无限滑动思路:设置到Max中间,第一张图片
            vp.setCurrentItem(Max/2-(Max/2%list.size()));
        }
    
        private void initView() {
            vp = findViewById(R.id.vp);
            tv = findViewById(R.id.tv);
            dot = findViewById(R.id.dot);
            //viewpager添加监听
            vp.addOnPageChangeListener(this);
        }
    
        @Override
        public void onPageScrolled(int i, float v, int i1) {
            //滚动时调用
        }
    
        @Override
        public void onPageSelected(int i) {
            //向右无限滑动思路,当i=5,10等,变回0,所以取余
            int newposition = i%imgId.length;
            //新的条目被选中时调用
            //设置当前文字
            tv.setText(text[newposition]);
            //进来把上一个小白点设置为灰色
            dot.getChildAt(lastDot).setEnabled(false);
            //设置当前小白点
            dot.getChildAt(newposition).setEnabled(true);
            //记录上一个小白点
            lastDot = newposition;
        }
    
        @Override
        public void onPageScrollStateChanged(int i) {
            //滚动状态时调用
        }
    
        class MyAdapter extends PagerAdapter {
            @Override
            public int getCount() {
                return Max;
            }
    
            //判断能否复用,一般写法
            @Override
            public boolean isViewFromObject(@NonNull View view, @NonNull Object o) {
                return view == o;
            }
    
            //创建条目
            @NonNull
            @Override
            public Object instantiateItem(@NonNull ViewGroup container, int position) {
                int newposition = position%imgId.length;
                ImageView imageView = list.get(newposition);
                container.addView(imageView);
                return imageView;
            }
    
            //销毁条目
            @Override
            public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
                container.removeView((View) object);
            }
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            //因为开启了一个无限循环,不设置为false,会在后台一直循环
            isrunning = false;
        }
    }
    

    selector_bg_point.xml

    <selector xmlns:android="http://schemas.android.com/apk/res/android" >
        <item android:state_enabled="true" android:drawable="@drawable/shape_bg_point_enable"/>
        <item android:state_enabled="false" android:drawable="@drawable/shape_bg_point_disable"/>
    </selector>
    

    shape_bg_point_enable.xml

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="oval" >
        <corners android:radius="5dp" />
        <solid android:color="#FFFFFF" />
    </shape>
    

    shape_bg_point_disable.xml

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="oval" >
        <corners android:radius="5dp" />
        <solid android:color="@android:color/darker_gray" />
    </shape>
    

    相关文章

      网友评论

          本文标题:Android:轮播图广告

          本文链接:https://www.haomeiwen.com/subject/knmmsctx.html