iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >怎么在Android中实现一个广告无限循环功能
  • 853
分享到

怎么在Android中实现一个广告无限循环功能

android 2023-05-30 18:05:12 853人浏览 八月长安
摘要

今天就跟大家聊聊有关怎么在Android中实现一个广告无限循环功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。代码实现:public class NewsHom

今天就跟大家聊聊有关怎么在Android中实现一个广告无限循环功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

代码实现:

public class NewsHomeFragment extends BaseFragment implements OnTouchListener {  private ImageHandler mHandler = new ImageHandler(new WeakReference<NewsHomeFragment>(this));  private ViewPager mViewPager;  // 自定义轮播图的资源  private int[] mImageResIds = { R.drawable.img1, R.drawable.img2, R.drawable.img3, R.drawable.img4, R.drawable.img5 };  // 放轮播图片的ImageView 的list  private List<ImageView> mImageList = new ArrayList<ImageView>();  // 放圆点的View的list  private List<View> mDotList = new ArrayList<View>();  @Override  public View initConvertView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {    return inflater.inflate(R.layout.fragment_news_main, container, false);  }  @Override  protected void onVisible(boolean isInit) {    if (isInit) {      initViews();    }  }  private void initViews() {    // 初始化iewPager的内容    mViewPager = (ViewPager) mConvertView.findViewById(R.id.view_pager);    LinearLayout dotLayout = (LinearLayout) mConvertView.findViewById(R.id.dotLayout);    dotLayout.removeAllViews();    for (int i = 0; i < mImageResIds.length; i++) {      ImageView imageView = new ImageView(getActivity());      imageView.setScaleType(ScaleType.FIT_XY);      // view.setTag(mImageResId[i]);      imageView.setImageResource(mImageResIds[i]);      mImageList.add(imageView);      View dotView = new View(getActivity());      LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(getResources().getDimensionPixelSize(R.dimen.dot_width),          getResources().getDimensionPixelSize(R.dimen.dot_width));      params.setMargins(4, 0, 4, 0);      dotView.setLayoutParams(params);//     if (i == 0) {//       dotView.setBackgroundResource(R.drawable.dot_red);//     } else {//       dotView.setBackgroundResource(R.drawable.dot_gray);//     }      dotLayout.addView(dotView);      mDotList.add(dotView);    }    mViewPager.setAdapter(new ImageAdapter(mImageList));    mViewPager.setOnPageChangeListener(new PageChangeListener());    mViewPager.setFocusable(true);    mViewPager.setCurrentItem(Integer.MAX_VALUE / 2);// 默认在中间,使用户看不到边界    mViewPager.setOnTouchListener(this);    // 开始轮播效果    mHandler.sendEmptyMessageDelayed(ImageHandler.MSG_UPDATE_IMAGE, ImageHandler.MSG_DELAY);  }  @Override  public boolean onTouch(View v, MotionEvent event) {    switch (event.getAction()) {    case MotionEvent.ACTION_DOWN:      mHandler.sendEmptyMessage(ImageHandler.MSG_KEEP_SILENT);      break;    case MotionEvent.ACTION_UP:    case MotionEvent.ACTION_CANCEL:      mHandler.sendEmptyMessageDelayed(ImageHandler.MSG_UPDATE_IMAGE, ImageHandler.MSG_DELAY);      break;    }    return false;  }  private class PageChangeListener implements OnPageChangeListener {    // 配合Adapter的currentItem字段进行设置。    @Override    public void onPageSelected(int position) {      // 这个是设置左滑切换底部view的边界,必须要设置      App.getInstance().setBorderViewPosition(position);      mHandler.sendMessage(Message.obtain(mHandler, ImageHandler.MSG_PAGE_CHANGED, position, 0));    }    @Override    public void onPageScrolled(int position, float arg1, int arg2) {    }    // 覆写该方法实现轮播效果的暂停和恢复    @Override    public void onPageScrollStateChanged(int state) {      switch (state) {      case ViewPager.SCROLL_STATE_DRAGGING:        mHandler.sendEmptyMessage(ImageHandler.MSG_KEEP_SILENT);        break;      case ViewPager.SCROLL_STATE_IDLE:        mHandler.sendEmptyMessageDelayed(ImageHandler.MSG_UPDATE_IMAGE, ImageHandler.MSG_DELAY);        break;      default:        break;      }    }  }  private class ImageAdapter extends PagerAdapter {    private List<ImageView> viewlist;    public ImageAdapter(List<ImageView> viewlist) {      this.viewlist = viewlist;    }    @Override    public int getCount() {      // 设置成最大,使用户看不到边界      return Integer.MAX_VALUE;    }    @Override    public boolean isViewFromObject(View arg0, Object arg1) {      return arg0 == arg1;    }    @Override    public void destroyItem(ViewGroup container, int position, Object object) {      // Warning:不要在这里调用removeView    }    @Override    public Object instantiateItem(ViewGroup container, int position) {      // 对ViewPager页号求模取出View列表中要显示的项      position %= viewlist.size();      if (position < 0) {        position = viewlist.size() + position;      }      ImageView view = viewlist.get(position);      // 如果View已经在之前添加到了一个父组件,则必须先remove,否则会抛出IllegalStateException。      ViewParent vp = view.getParent();      if (vp != null) {        ViewGroup parent = (ViewGroup) vp;        parent.removeView(view);      }      container.addView(view);      // 此处可添加监听事件      return view;    }  }  private static class ImageHandler extends Handler {        protected static final int MSG_UPDATE_IMAGE = 1;        protected static final int MSG_KEEP_SILENT = 2;        protected static final int MSG_BREAK_SILENT = 3;        protected static final int MSG_PAGE_CHANGED = 4;    // 轮播间隔时间    protected static final long MSG_DELAY = 3000;    // 使用弱引用避免Handler泄露.这里的泛型参数可以不是Activity,也可以是Fragment等    private WeakReference<NewsHomeFragment> weakReference;    private int currentItem = 0;    // private boolean isOnce = true;    protected ImageHandler(WeakReference<NewsHomeFragment> wk) {      weakReference = wk;    }    @Override    public void handleMessage(Message msg) {      super.handleMessage(msg);      final NewsHomeFragment fragment = weakReference.get();      if (fragment == null) {        // Activity已经回收,无需再处理UI了        return;      }      // 第一次不删重复的消息      if (currentItem != 0) {        // 检查消息队列并移除未发送的消息,这主要是避免在复杂环境下消息出现重复等问题。        if (fragment.mHandler.hasMessages(MSG_UPDATE_IMAGE)) {          fragment.mHandler.removeMessages(MSG_UPDATE_IMAGE);        }      }      switch (msg.what) {      case MSG_UPDATE_IMAGE:        currentItem++;        fragment.mViewPager.setCurrentItem(currentItem);        // 准备下次播放        fragment.mHandler.sendEmptyMessageDelayed(MSG_UPDATE_IMAGE, MSG_DELAY);        break;      case MSG_KEEP_SILENT:        // 只要不发送消息就暂停了        break;      case MSG_BREAK_SILENT:        fragment.mHandler.sendEmptyMessageDelayed(MSG_UPDATE_IMAGE, MSG_DELAY);        break;      case MSG_PAGE_CHANGED:        // 记录当前的页号,避免播放的时候页面显示不正确。        int position = msg.arg1;        int lastIndex = 0;        int index = position % fragment.mImageList.size();        for (int i = 0; i < fragment.mDotList.size(); i++) {          fragment.mDotList.get(i).setBackgroundResource(R.drawable.dot_nORMal);        }        if (fragment.mDotList.get(index)!=null) {          fragment.mDotList.get(index).setBackgroundResource(R.drawable.dot_red);        }        lastIndex = index;        currentItem = position;        break;      default:        break;      }    }  }}

三、布局

<LinearLayout 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"  android:orientation="vertical"  tools:context=".MainActivity" >  <RelativeLayout    android:layout_width="fill_parent"    android:layout_height="@dimen/news_pic_height" >    <android.support.v4.view.ViewPager      android:id="@+id/view_pager"      android:layout_width="match_parent"      android:layout_height="@dimen/news_pic_height" />    <LinearLayout      android:id="@+id/dotLayout"      android:layout_width="match_parent"      android:layout_height="wrap_content"      android:layout_alignParentBottom="true"      android:gravity="right|bottom"      android:orientation="horizontal"      android:background="@color/transparent_white_half"      android:padding="8dp" >      <View        android:id="@+id/v_dot1"        android:layout_width="@dimen/dot_width"        android:layout_height="@dimen/dot_width"        android:background="@drawable/dot_normal" />      <View        android:id="@+id/v_dot2"        android:layout_width="@dimen/dot_width"        android:layout_height="@dimen/dot_width"        android:layout_marginLeft="5dp"        android:background="@drawable/dot_red" />    </LinearLayout>  </RelativeLayout></LinearLayout>

看完上述内容,你们对怎么在Android中实现一个广告无限循环功能有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网精选频道,感谢大家的支持。

--结束END--

本文标题: 怎么在Android中实现一个广告无限循环功能

本文链接: https://www.lsjlt.com/news/220233.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么在Android中实现一个广告无限循环功能
    今天就跟大家聊聊有关怎么在Android中实现一个广告无限循环功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。代码实现:public class NewsHom...
    99+
    2023-05-30
    android
  • Android ViewPager如何实现无限循环轮播广告位Banner效果
    这篇文章将为大家详细讲解有关Android ViewPager如何实现无限循环轮播广告位Banner效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。现在一些app通常会在头部放一个广告位,底部放置一行小...
    99+
    2023-05-30
    android viewpager banner
  • 如何在Android应用中实现一个无限循环轮播
    如何在Android应用中实现一个无限循环轮播?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、自定义控件属性新建自定义控件SliderLayout继承于Rel...
    99+
    2023-05-31
    android roi
  • 怎么在Android中实现一个滚动条广告
    这篇文章将为大家详细讲解有关怎么在Android中实现一个滚动条广告,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。ViewSwitcher的介绍ViewSwitcher 设置动画ViewSw...
    99+
    2023-05-30
    android
  • Android中怎么利用ViewPager实现无限循环
    本篇文章为大家展示了Android中怎么利用ViewPager实现无限循环,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Android ViewPager实现无限循环的实例ViewPager自身并不...
    99+
    2023-05-31
    android viewpager
  • Android中使用VideoView实现一个循环播放功能
    本篇文章给大家分享的是有关Android中使用VideoView实现一个循环播放功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。具体如下:package com.hangch...
    99+
    2023-05-31
    android videoview roi
  • 如何在Android中利用 ViewPager实现一个循环播放功能
    这篇文章将为大家详细讲解有关如何在Android中利用 ViewPager实现一个循环播放功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.初始化布局我们先来写一个ViewPager广告...
    99+
    2023-05-31
    android viewpager age
  • 如何在Android中利用viewpager实现一个无限轮播功能
    如何在Android中利用viewpager实现一个无限轮播功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。小圆点属性dot_focused.xml<xml&nbs...
    99+
    2023-05-30
    viewpager android
  • 如何在Android中利用ListView实现一个内容无限循环显示效果
    这期内容当中小编将会给大家带来有关如何在Android中利用ListView实现一个内容无限循环显示效果,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。其实要达到无限循环显示,主要就是实现继承Adapter...
    99+
    2023-05-31
    android listview roi
  • C#怎么实现无限循环
    本篇内容主要讲解“C#怎么实现无限循环”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#怎么实现无限循环”吧!循环控制语句循环控制语句更改执行的正常序列。当执行离开一个范围时,所有在该范围中创建...
    99+
    2023-06-17
  • 怎么在Android中实现一个摇一摇功能
    本篇文章给大家分享的是有关怎么在Android中实现一个摇一摇功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。步骤1:声明一个SensorManager对象步骤2:重写Act...
    99+
    2023-06-14
  • Scala无限循环怎么实现
    本篇内容主要讲解“Scala无限循环怎么实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Scala无限循环怎么实现”吧!有的时候,我们可能需要多次执行同一块代码。一般情况下,语句是按顺序执行的...
    99+
    2023-06-19
  • Android怎么实现无限循环和自动轮播
    要实现Android中的无限循环和自动轮播,可以使用ViewPager和PagerAdapter来实现。下面是实现的步骤:1. 创建...
    99+
    2023-10-18
    Android
  • 怎么在Android中实现一个无网络页面切换功能
    怎么在Android中实现一个无网络页面切换功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。实现思路需求是在无网络的时候显示特定的页面,想到要替换页面的地方,大多都是recy...
    99+
    2023-05-30
    android
  • 在android中使用ViewPager怎么实现无限轮播功能
    这篇文章给大家介绍在android中使用ViewPager怎么实现无限轮播功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、布局<&#63;xml version="1.0" en...
    99+
    2023-05-31
    viewpager android age
  • 怎么在Android中实现一个倒计时功能
    本篇文章给大家分享的是有关怎么在Android中实现一个倒计时功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。以30分钟为例写的一个倒计时:public class Main...
    99+
    2023-05-31
    android roi %d
  • 怎么在Android中实现一个计步器功能
    本篇文章给大家分享的是有关怎么在Android中实现一个计步器功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。activity_main.xml<xml ve...
    99+
    2023-06-14
  • 怎么实现Android TV 3D卡片无限循环效果
    这篇文章主要讲解了“怎么实现Android TV 3D卡片无限循环效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么实现Android TV 3D卡片无限循环效果”吧!##思路自定义Vi...
    99+
    2023-06-25
  • Android中怎么用Gallery实现无限循环及自动轮播
    要实现Android中Gallery的无限循环和自动轮播功能,可以按照以下步骤进行操作: 在XML布局文件中,将Gallery控...
    99+
    2023-10-22
    Android Gallery
  • RecyclerView无限循环效果怎么实现
    这篇文章主要介绍“RecyclerView无限循环效果怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“RecyclerView无限循环效果怎么实现”文章能帮助大家解决问题。1、修改adpter...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作