动态广告栏

预期效果:
在窗口中会显示4张图片,并且每张图片的会以2s的频率切换,在右下角会有显示图片的指示,都是联动的效果。

活动窗口的启动按钮

<Button
    android:id="@+id/btn_test_ADdialog"
    android:text="打开广告栏"
    android:shadowColor="@color/black"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

在另一个活动窗口中的布局

<!-- 相对布局-->
<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
  <androidx.viewpager.widget.ViewPager
      android:id="@+id/vp_adv"
      android:layout_width="match_parent"
      android:layout_height="300dp"/>

    <LinearLayout
        android:id="@+id/li_adc"
        android:layout_marginTop="-30dp"
        android:orientation="horizontal"
        android:gravity="right"
        android:layout_below="@+id/vp_adv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </LinearLayout>

</RelativeLayout>
<Button
    android:text="测试"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

.java文件

public class Slide_Picture extends AppCompatActivity {
   private ImageView indicator; // 表示圆点指示器
    private ImageView[] indicators; //保存4个圆点指示器的数组
    private boolean isContinue = true; //
    private ViewPager viewPager;
    private ViewGroup group;
    private AtomicInteger index = new AtomicInteger();

    private Handler viewHandler = new Handler(){
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            viewPager.setCurrentItem(msg.what); // 把这个消息设置为当前页
        }
    };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_slide__picture);
        InitView();
    }


    public void InitView(){
        // 绑定数据
        viewPager = findViewById(R.id.vp_adv);// 试图页  图片布局
        group = findViewById(R.id.li_adc); // 圆点布局

        // 四张广告图片加入到集合中进行保存
        List<View> listPics = new ArrayList<>();

        ImageView img1 = new ImageView(this);
        img1.setBackgroundResource(R.drawable.ad1);
        listPics.add(img1); // 加载到集合中

        ImageView img2 = new ImageView(this);
        img2.setBackgroundResource(R.drawable.ad2);
        listPics.add(img2); // 加载到集合中

        ImageView img3 = new ImageView(this);
        img3.setBackgroundResource(R.drawable.ad3);
        listPics.add(img3); // 加载到集合中

        ImageView img4 = new ImageView(this);
        img4.setBackgroundResource(R.drawable.ad4);
        listPics.add(img4); // 加载到集合中


        // 动态设置4个圆点的属性
        indicators = new ImageView[listPics.size()];
       for (int i = 0; i< indicators.length; i++){
            indicator = new ImageView(this);
            // 设置布局的大小
            indicator.setLayoutParams(new LinearLayout.LayoutParams(40,40));
            // 每个小圆点都有5的距离
            indicator.setPadding(5,5,5,5);
            indicators[i] = indicator;
            if(i == 0){
                indicators[i].setBackgroundResource(R.drawable.focus); // 设置指示器的外观
            }else{
                indicators[i].setBackgroundResource(R.drawable.blur);
            }
            group.addView(indicators[i]);
        }
        // 设置viewPager的适配器
        viewPager.setAdapter(new MyPagerAdapter(listPics));

       // 设置viewPager的页面改变的监听器
        viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override  // 当从第一个到第二个会触发
            public void onPageSelected(int position) {
                index.getAndSet(position); //
                for(int i = 0; i< indicators.length;i++){
                    if(i == position){
                        indicators[i].setBackgroundResource(R.drawable.focus); // 设置外观
                    }else{
                        indicators[i].setBackgroundResource(R.drawable.blur);
                    }
                }
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

        /* 在鼠标按下的时候等值翻页 */
        viewPager.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch(event.getAction()){
                    case MotionEvent.ACTION_DOWN: // 鼠标压下的时候
                        isContinue = false;
                        break;
                    case MotionEvent.ACTION_UP: // 鼠标抬起的时候
                        isContinue = true;
                        break;
                }
                return false;
            }
        });





        /* 使用多线程自动定时切换viewPage*/
        new Thread(new Runnable() {
            @Override
            public void run() {
                while(true){
                    if(isContinue){
                        viewHandler.sendEmptyMessage(index.get()) ;// 发送当前页的下标
                        whatOption();
                    }
                }
            }
        }).start(); // 启动线程
    }
    private void whatOption(){
        index.incrementAndGet(); // 将当前位置值加1
        if(index.get() > indicators.length -1){  // 最后一页
            index.getAndAdd(-4);   // 当前页减4,变为第0页
        }
        try {
            Thread.sleep(2000); // 休眠2s
        }catch (InterruptedException e){
            e.printStackTrace();
        }
    }
}
class MyPagerAdapter extends PagerAdapter {
    private List<View> viewList;
    // 构造方法  赋值图片的集合
    public MyPagerAdapter(List<View> viewList){
       this.viewList = viewList;
   }
    @Override
    public int getCount() {
        return viewList.size();  // 返回集合的个数
    }

    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return view == object;
    }

    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        container.addView(viewList.get(position), 0);
        return viewList.get(position);
    }

    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
      container.removeView(viewList.get(position));
    }

效果:
在这里插入图片描述

今天8点才起来,我的天呢,这是怎么了呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值