zoukankan      html  css  js  c++  java
  • Android广告轮播图实现

    先看效果

    第一步,布局

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.example.xw.myviewpager.MainActivity">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="180dp">
    <android.support.v4.view.ViewPager
        android:id="@+id/vp"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
    </android.support.v4.view.ViewPager>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_alignParentBottom="true"
            android:orientation="horizontal"
            android:background="#66000000"
            android:layout_height="30dp">
            <LinearLayout
                android:id="@+id/point_container"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:layout_gravity="center"
                android:gravity="center"
               >
    
            </LinearLayout>
        </LinearLayout>
    </RelativeLayout>
    </RelativeLayout>

    这里的point_container用来做小圆点的容器

    二 圆点形状和状态选择器

    bg_shape.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>

    bg_shape2.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="#808080"/>
    </shape>

    selector.xml

    "1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_enabled="true" android:drawable="@drawable/bg_shape"/>
        <item android:state_enabled="false"  android:drawable="@drawable/bg_shape2"/>
    </selector>

    enable="false"是灰色圆点,当state_enabled="true"是白色圆点

    三 MainActivity

    import android.os.Bundle;
    import android.support.v4.view.PagerAdapter;
    import android.support.v4.view.ViewPager;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    
    import java.util.ArrayList;
    
    public class MainActivity extends AppCompatActivity implements ViewPager.OnPageChangeListener{
        private ViewPager vp;
       private  int[] imas;
       private  LinearLayout ll;
       private ArrayList<ImageView> imaList;
        private Boolean flag;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //初始化布局
            initViews();
            //数据
            initData();
    
            //适配器
            initAdapter();
            flag=true;
            //实现自动轮播
            new Thread(new Runnable() {
                @Override
                public void run() {
    
                        while (flag) {
                            try {
                                Thread.sleep(2000);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    vp.setCurrentItem(vp.getCurrentItem() + 1);
                                }
                            });
                    }
                }
            }).start();
        }
    
        private void initAdapter() {
            ll.getChildAt(0).setEnabled(true);
            vp.setAdapter(new MyAdapter());
            vp.setCurrentItem(Integer.MAX_VALUE/2+2);//这里以一个%5为0的数开始,这样打开默认会在第0个item显示
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            flag=false;
        }
    
        private void initData() {
        }
    
        private void initViews() {
            vp = (ViewPager) findViewById(R.id.vp);
            vp.setOnPageChangeListener(this);
          ll= (LinearLayout) findViewById(R.id.point_container);
            //图片数组
            imas = new int[]{R.drawable.a, R.drawable.b, R.drawable.c, R.drawable.d, R.drawable.e,};
            ImageView iv;
            imaList = new ArrayList<ImageView>();
            View pointview;
            for (int i = 0; i < imas.length; i++) {
                iv = new ImageView(this);
                iv.setImageResource(imas[i]);
                imaList.add(iv);
    
                //加小白点
                pointview =new View(this);
                pointview.setEnabled(false);
                pointview.setBackgroundResource(R.drawable.selector);
                LinearLayout.LayoutParams params =new LinearLayout.LayoutParams(15,15);
                //params.gravity= Gravity.CENTER;
                if(i!=0)
                    params.leftMargin=10;
                ll.addView(pointview,
                       params );
            }
    
        }
    
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
    
        }
    
        @Override
        public void onPageSelected(int position) {
            for(int i=0;i<ll.getChildCount();i++){
                ll.getChildAt(i).setEnabled(false);
            }
                ll.getChildAt(position%5).setEnabled(true);//设置小白点
        }
    
        @Override
        public void onPageScrollStateChanged(int state) {
    
        }
    
    
        class MyAdapter extends PagerAdapter {
            @Override
            public Object instantiateItem(ViewGroup container, int position) {
               int newposition =position%5;//得到新位置
                ImageView imageView=imaList.get(newposition);
                container.addView(imageView);
                return imageView;//把View对象返回给框架,必须重写
            }
    
    
    
    
            @Override
            public void destroyItem(ViewGroup container, int position, Object object) {
                container.removeView((View) object);
    
            }
    
            @Override
            public int getCount() {
                return Integer.MAX_VALUE;
            }
    
            @Override //判断复用
            public boolean isViewFromObject(View view, Object object) {
                return view==object;
            }
    
    
        }
    }
  • 相关阅读:
    05Linux系统常用命令
    04Linux系统目录结构
    02Linux文件系统基本结构
    01Linux_BASH基本操作
    [HTML] HTML常用标签及HTML语义化理解
    [Tools] MDN简介及如何使用MDN查找资料
    [HTTP] 初识HTTP
    [Git] Git 入门(常用命令使用)
    [CL](入门)命令行常用命令使用技巧
    IFE_part2_JavaScript_Ajax学习
  • 原文地址:https://www.cnblogs.com/xurui1995/p/5759371.html
Copyright © 2011-2022 走看看