Android一段时间无操作之后,进入广告轮播界面,以及触摸之后停止轮播

想要的图片轮播Activity

public class BannerMediaActivity extends AppCompatActivity implements View.OnClickListener {
    private RelativeLayout full_screen;
    private BannerPager banner;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_banner_media);
        //设置屏幕长亮
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
                WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        full_screen = (RelativeLayout)findViewById(R.id.full_screen);
        // 从布局文件中获取名叫banner_media的横幅轮播条
        banner = (BannerPager)findViewById(R.id.banner_media);
        // 获取横幅轮播条的布局参数
        LayoutParams params = (LayoutParams) banner.getLayoutParams();
        //params.height = (int) (Utils.getScreenWidth(this) * 250f / 640f);
        // 设置横幅轮播条的布局参数
        banner.setLayoutParams(params);
        // 设置横幅轮播条的广告图片队列
        banner.setImage(ImageList.getDefault());//这里我的图片是从网络上拉下来的,你可以自定义List
        // 开始广告图片的轮播滚动
        banner.start();
        full_screen.setOnClickListener(this);
        //全屏展示
        StatusBarUtil.fullScreen(this);
     
    }

    @Override
    public void onClick(View v) {
       finish();
    }

    @Override
    protected void onStop() {
        super.onStop();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        banner.stop();
        System.gc();
    }
}

对应activity_banner_media.xml文件

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

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <!--自定义的轮播图,需要使用全路径-->
        <com.example.shopingcart.widget.BannerPager
            android:id="@+id/banner_media"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal">
            <LinearLayout
                android:layout_weight="5"
                android:layout_width="0dp"
                android:layout_height="match_parent"></LinearLayout>
        <LinearLayout
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:orientation="vertical">
            <LinearLayout
                android:layout_weight="3"
                android:layout_width="match_parent"
                android:layout_height="0dp">
            </LinearLayout>
        <ImageView
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:src="@drawable/guide" />
        </LinearLayout>
        </LinearLayout>
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/full_screen"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:alpha="0">
    </RelativeLayout>

</FrameLayout>

BannerPager类

public class BannerPager extends RelativeLayout {
    private static final String TAG = "BannerPager";
    private Context mContext;//声明一个上下文对象
    private ViewPager vp_banner;//声明一个翻页视图对象
    private List<ImageView> mViewList = new ArrayList<ImageView>();//声明一个图像视图队列
    private  int mInterval = 10000;//轮播的时间间隔,单位毫秒

    public BannerPager(Context context){
        this(context,null);
    }

    public BannerPager(Context context, AttributeSet attrs) {
        super(context,attrs);
        mContext = context;
        initView();
    }

    //开始广告轮播
    public void start(){
        //延迟若干秒后启动任务
        mHandler.postDelayed(mScroll,mInterval);
    }

    //停止广告轮播
    public void stop(){
        //移除滚动任务
        mHandler.removeCallbacks(mScroll);
    }

    //设置广告轮播的间隔时间
    public void setInterval(int interval) {
        mInterval = interval;
    }

    //设置广告图片队列
    public void setImage(ArrayList<Bitmap> imageList){
        //根据图片队列生成图像视图队列
        for(int i=0;i<imageList.size();i++){
            ImageView iv = new ImageView(mContext);
            iv.setImageBitmap(imageList.get(i));
            iv.setLayoutParams(new ViewGroup.LayoutParams(
                    ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
            iv.setScaleType(ImageView.ScaleType.FIT_XY);

            mViewList.add(iv);
        }
        //设置翻页视图的图像适配器
        vp_banner.setAdapter(new ImageAdapter());
        //设置翻页视图默认显示第一页
        vp_banner.setCurrentItem(0);
    }

    private Handler mHandler = new Handler();//声明一个处理器对象

    //定义一个滚动任务
    private Runnable mScroll = new Runnable() {
        @Override
        public void run() {
            scrollToNext();//滚动广告任务
            //延迟若干秒之后继续启动滚动任务
            mHandler.postDelayed(this,mInterval);

        }
    };

    //滚动到下一张广告图
    public void scrollToNext(){
        int index =vp_banner.getCurrentItem()+1;
        if(index>= mViewList.size()){
            index = 0;
        }
        //设置翻页视图显示指定位置的页面
        vp_banner.setCurrentItem(index);
    }

    //定义一个图像翻页适配器
    private class ImageAdapter extends PagerAdapter {
        @Override
        public int getCount() {
            return mViewList.size();
        }
        @Override
        public boolean isViewFromObject(View arg0, Object arg1) {
            return arg0 == arg1;
        }
        //从容器中销毁指定位置的页面
        public void destroyItem(ViewGroup container,int position,Object object){
            container.removeView(mViewList.get(position));
        }
        public Object instantiateItem(ViewGroup container, int position){
            container.addView(mViewList.get(position));
            return mViewList.get(position);
        }
    }

    //初始化视图
    private void initView() {
        //根据布局文件media.xml生成视图对象
        View view = LayoutInflater.from(mContext).inflate(R.layout.banner_media,null);
        //从布局文件中获取名叫vp_banner的视图
        vp_banner = view.findViewById(R.id.vp_banner);
        addView(view);// 将该布局视图添加到横幅轮播条
    }
}

倒计时CountDownTimer

public class BackMedia extends CountDownTimer {
    private String TAG = "BackMedia";
    private Context context;

    /*
    * 参数millisInFuture   倒计时总时间
    * 参数 countDownInterval 渐变时间
    * */
    public BackMedia(long millisInFuture,long countDownInterval ,Context context){
        super(millisInFuture,countDownInterval);
        this.context = context;
    }

    //计时完毕时触发
    @Override
    public void onFinish() {
        context.startActivity(new Intent(context, BannerMediaActivity.class));
    }

    //计时过程显示
    @Override
    public void onTick(long millisUntilFinished) {
        //Log.i(TAG,"BackMedia seconds remaining"+millisUntilFinished/1000);
    }
}

这是banner_media.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

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


</RelativeLayout>

直接在想要的activity类中使用BackMedia就可以了,因为我这个是直接从项目中截取下来的,没有本地图片,读者可以自己自定义图片,可能有些地方有小错误,但不影响使用,欢迎指出,

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值