效果图:

布局:

<?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=".MainActivity">    <android.support.v4.view.ViewPager        android:id="@+id/viewpager"        android:layout_width="match_parent"        android:layout_height="200dp" />    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_alignBottom="@id/viewpager"        android:background="#33000000"        android:orientation="vertical">        <TextView            android:id="@+id/tv_title"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:gravity="center"            android:text="广告条"            android:textColor="@android:color/white"            android:textSize="18sp" />        <LinearLayout            android:id="@+id/point_group"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_gravity="center_horizontal"            android:orientation="horizontal">LinearLayout>    LinearLayout>RelativeLayout>

指示点:

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="oval">    <size        android:width="8dp"        android:height="8dp" />    <solid android:color="#aaFFFFFF" />shape>
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="oval">    <size android:width="8dp" android:height="8dp" />    <solid android:color="#ff0000" />shape>
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">    <item android:drawable="@drawable/point_focured" android:state_enabled="true" />    <item android:drawable="@drawable/point_normal" />selector>

activity:

package com.example.xyh.banner;import android.os.Handler;import android.os.Message;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import java.util.ArrayList;import java.util.List;/** * 广告轮播 */public class MainActivity extends AppCompatActivity {    private ViewPager mViewPager;    private TextView tvTitle;    private LinearLayout pointGroup;    private List<ImageView> list;    // 上一个页面的位置    protected int lastPosition;    // 图片资源ID    private final int[] imageIds = {R.drawable.a, R.drawable.b, R.drawable.c,            R.drawable.d, R.drawable.e};    //图片标题集合    private final String[] title = {            "巩俐不低俗,我就不能低俗",            "扑树又回来啦!再唱经典老歌引万人大合唱",            "揭秘北京电影如何升级",            "乐视网TV版大派送",            "热血屌丝的反杀"    };    //判断是否在自动滚动    private boolean isRunning = false;    private Handler mHandler = new Handler() {        @Override        public void handleMessage(Message msg) {            //让viewPager 滑动到下一页            mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1);            if (isRunning) {                // 继续发送延时2 秒的消息, 形成类似递归的效果, 使广告一直循环切换                mHandler.sendEmptyMessageDelayed(0, 3000);            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        findViews();        init();        initListener();        isRunning = true;        mHandler.sendEmptyMessageDelayed(0, 3000);    }    private void init() {        list = new ArrayList<>();        for (int i = 0; i < imageIds.length; i++) {            ImageView imageView = new ImageView(this);            imageView.setBackgroundResource(imageIds[i]);            list.add(imageView);            //动态添加指示点            ImageView point = new ImageView(this);            point.setBackgroundResource(R.drawable.point_bg);            pointGroup.addView(point);            //布局参数            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(                    ViewGroup.LayoutParams.WRAP_CONTENT,                    ViewGroup.LayoutParams.WRAP_CONTENT);            if (i > 0) {                params.leftMargin = 20;            }            point.setLayoutParams(params); //设置布局参数            if (i == 0) {                point.setEnabled(true);            } else {                point.setEnabled(false);            }        }        MyPagerAdapter myPagerAdapter = new MyPagerAdapter(list);        mViewPager.setAdapter(myPagerAdapter);        tvTitle.setText(title[0]);        //把当前页面设置为中间的,这样左右都有很多页面        mViewPager.setCurrentItem(Integer.MAX_VALUE / 2 - (Integer.MAX_VALUE / 2 % list.size()));    }    private void initListener() {        mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {            @Override            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {            }            @Override            public void onPageSelected(int position) {                position = position % list.size();                //设置指示点状态                pointGroup.getChildAt(position).setEnabled(true);                pointGroup.getChildAt(lastPosition).setEnabled(false);                lastPosition = position;                tvTitle.setText(title[position]);            }            @Override            public void onPageScrollStateChanged(int state) {            }        });    }    private void findViews() {        mViewPager = (ViewPager) findViewById(R.id.viewpager);        tvTitle = (TextView) findViewById(R.id.tv_title);        pointGroup = (LinearLayout) findViewById(R.id.point_group);    }    @Override    protected void onDestroy() {        super.onDestroy();        isRunning = false;    }}

适配器:

package com.example.xyh.banner;import android.support.v4.view.PagerAdapter;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import java.util.List;/** * Created by xiaoyehai on 2018/5/22/022. */public class MyPagerAdapter extends PagerAdapter {    private List<ImageView> list;    public MyPagerAdapter(List<ImageView> list) {        this.list = list;    }    @Override    public int getCount() {        //return list.size();        return Integer.MAX_VALUE;    }    @Override    public boolean isViewFromObject(View view, Object object) {        return view == object;    }    @Override    public Object instantiateItem(ViewGroup container, int position) {        ImageView imageView = list.get(position % list.size());        container.addView(imageView);        //实现按下停止轮播imageView.setOnTouchListener(new View.OnTouchListener() {                @Override                public boolean onTouch(View view, MotionEvent motionEvent) {                    switch (motionEvent.getAction()){                        case MotionEvent.ACTION_DOWN:                            handler.removeCallbacksAndMessages(null);                            break;                        case MotionEvent.ACTION_MOVE:                            break;                        case MotionEvent.ACTION_UP:                            handler.removeCallbacksAndMessages(null);                            handler.sendEmptyMessageDelayed(0,3000);                            break;                    }                    return true;                }            });        return imageView;    }    @Override    public void destroyItem(ViewGroup container, int position, Object object) {        container.removeView((View) object);        object = null;    }}

图片轮播也可以采用计时器的方式实现

第三方的图片轮播XBanner
第三方的图片轮播banner

更多相关文章

  1. android布局layout边框颜色
  2. 获取Bitmap和对Bitmap的操作工具类
  3. android双指平移、旋转、缩放控件完美版
  4. android 图片手势放大缩小
  5. AsyncTask的使用 (二)图片下载,进度条
  6. Android关于图片和Base64转码的工具类
  7. 图片裁剪关于return-data
  8. android将视频文件转化为图片
  9. Android中如何移动图片

随机推荐

  1. android 实现自由移动的悬浮按钮
  2. Android 判断当前设备是手机还是平板的最
  3. View机制深入学习(三) View中的消息传递及I
  4. Android中SQLite数据库中query或者rawque
  5. 2021-01-09
  6. Android(安卓)实现歌曲播放时歌词同步显
  7. android 使用ffmpeg加水印
  8. ubuntu gradle编译总结
  9. android各种对话框总结笔记
  10. android中去掉标题栏和状态栏,实现全屏