Android实现Banner界面广告图片循环轮播

本文介绍了如何在Android应用中实现Banner界面的广告图片循环轮播,通过提供主Activity的代码片段,适配器BannerAdapter的使用,以及点指示器的布局文件point_bg_enable.xml, point_bg_normal.xml和point_background.xml的细节。" 83179193,7017190,C#获取本周、本月、本季和本年的时间范围,"['C#编程', '日期与时间', '编程技巧']

主Activity代码如下

import android.app.Activity;
import android.os.Bundle;
import android.os.SystemClock;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.LinearLayout.LayoutParams;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends Activity {

    //声明控件
    private ViewPager mViewPager;
    private List<ImageView> mlist;
    private TextView mTextView;
    private LinearLayout mLinearLayout;

    //广告素材
    private int[] bannerImages = { R.drawable.img1, R.drawable.img3, R.drawable.img4, R.drawable.pic1 };
    // 广告语
//    private String[] bannerTexts = { "因为专业 所以卓越", "坚持创新 行业领跑", "诚信 专业 双赢", "精细 和谐 大气 开放" };
    // ViewPager适配器与监听器
    private BannerAdapter mAdapter;
    private BannerListener bannerListener;
    // 圆圈标志位
    private int pointIndex = 0;
    // 线程标志
    private boolean isStop = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initData();
        initAction();

        // 开启新线程,2秒一次更新Banner
       new Thread(new Runnable() {

            @Override
            public void run() {
            while (!isStop) {
             SystemClock.sleep(2000);
              runOnUiThread(new Runnable() {

              @Override
               public void run() {
               mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1);
               }
              });
               }
               }
          }).start();
       }
          /**
          * 初始化事件
          */
         private void initAction() {
       bannerListener = new BannerListener();
        mViewPager.setOnPageChangeListener(bannerListener);
        //取中间数来作为起始位置
       int index = (Integer.MAX_VALUE / 2) - (Integer.MAX_VALUE / 2 % mlist.size());
      //用来出发监听器
      mViewPager.setCurrentItem(index);
       mLinearLayout.getChildAt(pointIndex).setEnabled(true);
      }

          /**
          * 初始化数据
          */
           private void initData() {
       mlist = new ArrayList<ImageView>();
       View view;
       LayoutParams params;
       for (int i = 0; i < bannerImages.length; i++) {
       // 设置广告图
        ImageView imageView = new ImageView(MainActivity.this);
        imageView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
         imageView.setBackgroundResource(bannerImages[i]);
          mlist.add(imageView);
          // 设置圆圈点
           view = new View(MainActivity.this);
          params = new LayoutParams(5, 5);
           params.leftMargin = 10;
           view.setBackgroundResource(R.drawable.point_background);
          view.setLayoutParams(params);
           view.setEnabled(false);

            mLinearLayout.addView(view);
            }
       mAdapter = new BannerAdapter(mlist);
       mViewPager.setAdapter(mAdapter);
        }

            /**
          * 初始化View操作
          */
          private void initView() {
      mViewPager = (ViewPager) findViewById(R.id.viewpager);
      mTextView = (TextView) findViewById(R.id.tv_bannertext);
      mLinearLayout = (LinearLayout) findViewById(R.id.points);
     }

  //实现VierPager监听器接口
   class BannerListener implements ViewPager.OnPageChangeListener {

    @Override
    public void onPageScrollStateChanged(int arg0) {
    }

        @Override
      public void onPageScrolled(int arg0, float arg1, int arg2) {
          }

                @Override
        public void onPageSelected(int position) {
           int newPosition = position % bannerImages.length;
//           mTextView.setText(bannerTexts[newPosition]);
           mLinearLayout.getChildAt(newPosition).setEnabled(true);
          mLinearLayout.getChildAt(pointIndex).setEnabled(false);
           // 更新标志位
            pointIndex = newPosition;

           }

}

            @Override
    protected void onDestroy(){
       // 关闭定时器
       isStop = true;
       super.onDestroy();
       }

}

acticity_main.xml

<?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.rrd.bannerdemo.MainActivity">

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="250dp">
    </android.support.v4.view.ViewPager>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/viewpager"
        android:background="#33000000"
        android:orientation="vertical"
        android:padding="5dp" >

        <TextView
            android:id="@+id/tv_bannertext"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:padding="5dp"
            android:text="  "
            android:textColor="@android:color/white" />

        <LinearLayout
            android:id="@+id/points"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal"
            android:orientation="horizontal" >
        </LinearLayout>
    </LinearLayout>
</RelativeLayout>

BannerAdapter 适配器

import android.support.v4.view.PagerAdapter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import java.util.List;

/**
 * ViewPager适配器
 */
public class BannerAdapter extends PagerAdapter {

    //数据源
    private List<ImageView> mList;

    public BannerAdapter(List<ImageView> list){
        this.mList = list;
    }

    @Override
    public int getCount() {
        //获取最大数实现无线循环效果
        return Integer.MAX_VALUE;
    }

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

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        container.addView(mList.get(position%mList.size()));
        return mList.get(position % mList.size());
    }

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

point_bg_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="0.5dp" />

    <solid android:color="#AAFFFFFF" />

</shape>

point_bg_normal.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/point_bg_enable" android:state_enabled="true"></item>
    <item android:drawable="@drawable/point_bg_normal" android:state_enabled="false"></item>

</selector>

point_background.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/point_bg_enable" android:state_enabled="true"></item>
    <item android:drawable="@drawable/point_bg_normal" android:state_enabled="false"></item>

</selector>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值