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

来源:互联网 发布:seo任务优化网站排名 编辑:程序博客网 时间:2024/05/21 09:45

主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>
0 0
原创粉丝点击