广告
返回顶部
首页 > 资讯 > 移动开发 >Android简单实现无限滚动自动滚动的ViewPager
  • 877
分享到

Android简单实现无限滚动自动滚动的ViewPager

自动viewpagerAndroid 2022-06-06 05:06:06 877人浏览 安东尼
摘要

经常我们会在应用中看到一个可以自动滚动,并且无限滚动的一个ViewPager,百度谷歌上面也有很多关于这方面的教程,但是感觉都略显麻烦,而且封装的都不是很彻底。所以试着封装一个

经常我们会在应用中看到一个可以自动滚动,并且无限滚动的一个ViewPager,百度谷歌上面也有很多关于这方面的教程,但是感觉都略显麻烦,而且封装的都不是很彻底。所以试着封装一个比较好用的ViewPager

效果如下:

简单的说一下实现思路,要实现无限滚动的话就要在PagerAdapter上面做一些手脚,在PagerAdapter的getCount的函数的返回值设置成Integer.MXA_VALUE就可以实现向右无限滚动,但是要实现向左无限滚动呢?就是一开始的时候setCurrentItem的时候设置一个非常大的值(大到你向左滚动了一万年还是有东西)


@Override 
    public int getCount() { 
      return Integer.MAX_VALUE; 
    } 

mPager.setCurrentItem(10000 * mDatas.size());//一开始设置成这样的话就可以向左无限滚动了 

然后另外一个就是底部的游标了:

底部的游标是用一个自定义视图:无非就是画一个背景,然后在画一个高亮的游标


 
  private class TipView extends View { 
    private int mPadding; 
    private int mCount; 
    private int mCurPos; 
    private Paint mNorPaint;//未被选中的颜色 
    private Paint mSelPaint;//被选中的颜色 白色 
    private int mHeight; 
    public TipView(Context context, int count) { 
      super(context); 
      mNorPaint = new Paint(); 
      mNorPaint.setAntiAlias(true); 
      int selHeight = ShowUtils.dip2px(2); 
      int norHeight = ShowUtils.dip2px(1); 
      mHeight = ShowUtils.dip2px(2); 
      mNorPaint.setStrokeWidth(norHeight); 
      mNorPaint.setColor(Color.argb(80, 255, 255, 255)); 
      mSelPaint = new Paint(); 
      mSelPaint.setAntiAlias(true); 
      mSelPaint.setStrokeWidth(selHeight); 
      mSelPaint.setColor(Color.WHITE); 
      mCount = count; 
      mPadding = ShowUtils.dip2px(0); 
    } 
    @Override 
    protected void onDraw(canvas canvas) { 
      super.onDraw(canvas); 
      int ow = (getWidth()-2 * mPadding)/ mCount; 
      int y = getHeight() / 2; 
      canvas.drawLine(mPadding, y, mCurPos * ow + mPadding, y, mNorPaint); 
      canvas.drawLine(mCurPos * ow + mPadding, y, (mCurPos + 1) * ow + mPadding, y, mSelPaint); 
      canvas.drawLine((mCurPos + 1) * ow + mPadding, y, getWidth() - mPadding, y, mNorPaint); 
    } 
    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
      ViewGroup.LayoutParams vp = getLayoutParams(); 
      vp.width = ViewGroup.LayoutParams.MATCH_PARENT; 
      vp.height = mHeight; 
      super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    } 
    public void setCurPostion(int pos) { 
      mCurPos = pos; 
      invalidate(); 
    } 
    public void setCount(int count) { 
      mCount = count; 
    } 
  } 

R.layout.layout_recommend_item的布局:


<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:Android="Http://schemas.android.com/apk/res/android" 
  android:orientation="vertical" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent"> 
  <ImageView 
    android:id="@+id/iv_pic" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:contentDescription="@null" 
    android:scaleType="fitXY"/> 
  <LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="48dp" 
    android:orientation="vertical" 
    android:layout_alignParentBottom="true" 
    android:background="@drawable/recommend" 
    android:gravity="center"> 
    <TextView 
      android:id="@+id/tv_desc" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:textColor="@color/white" 
      android:textSize="@dimen/text_nORMal" 
      android:maxLines="1" 
      android:ellipsize="end" 
      android:shadowColor="#ff333333" 
      android:shadowDx="2" 
      android:shadowDy="2" 
      android:paddingRight="8dp" 
      android:paddingLeft="8dp" 
      android:shadowRadius="1" /> 
  </LinearLayout> 
</RelativeLayout> 

还有一个是实现自动滚动,自动滚动的话就是监听OnPagerChangeListener里面的函数,在ViewPager状态改变的时候利用Handler发送一个切换界面的消息:


@Override 
    public void onPageScrollStateChanged(int i) { 
      curState = i; 
      if(i == ViewPager.SCROLL_STATE_DRAGGING){  //viewpager正在被拖动的时候 
        stopAnimation(); 
      }else { //没有可执行消息时候添加消息 实现自动滚动 
        if(!(sHandler.hasMessages(START_SCROLL)&&sHandler.hasMessages(SCROLL_NEXT))){ 
          startAnimation(); 
        } 
      } 
    } 
    @Override 
    public void onPageSelected(final int i) {  //页面跳转后得到调用 
      sHandler.removeMessages(SCROLL_NEXT); 
      sHandler.removeMessages(START_SCROLL); 
      if(curState == ViewPager.SCROLL_STATE_DRAGGING){ 
        return; 
      } 
      Message msg = sHandler.obtainMessage(SCROLL_NEXT); 
      msg.arg1 = i + 1; 
      msg.obj = mPager; 
      sHandler.sendMessageDelayed(msg, SHOW_TIME); 
      mTipView.setCurPostion(i % mDatas.size()); 
    } 

整体的代码:


import android.content.Context; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.os.Handler; 
import android.os.Message; 
import android.support.v4.view.PagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.util.DisplayMetrics; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.RelativeLayout; 
import android.widget.TextView; 
import com.nostra13.universalimageloader.core.DisplayImageOptions; 
import com.nostra13.universalimageloader.core.ImageLoader; 
import com.papau.show.R; 
import com.papau.show.entity.HeadViewEntity; 
import com.papau.show.utils.ShowUtils; 
import java.util.ArrayList; 
import java.util.List; 
public class RecommendView extends RelativeLayout implements IRecommend { 
  private static final int START_SCROLL = 1; 
  private static final int SCROLL_NEXT = 2; 
  private static final int SHOW_TIME = 5000; 
  private List<HeadViewEntity> mDatas = new ArrayList<>(); 
  private ViewPager mPager; 
  private Context mContext; 
  private int mWidth, mHeight; 
  private ImageLoader mLoader; 
  private DisplayImageOptions mOptions; 
  private int mTitleHeight; 
  private TipView mTipView; 
  private static Handler sHandler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
      int w = msg.what; 
      ViewPager pager = (ViewPager) msg.obj; 
      switch (w) { 
        case START_SCROLL: 
          pager.setCurrentItem(msg.arg1, true); 
          break; 
        case SCROLL_NEXT: 
          pager.setCurrentItem(msg.arg1, true); 
          break; 
      } 
    } 
  }; 
  public RecommendView(Context context) { 
    super(context); 
  } 
  public RecommendView(Context context, int w, int h) { 
    super(context); 
    mContext = context; 
    mWidth = w; 
    mHeight = h; 
    initView(); 
//    mPager.setAdapter(new RecommendAdapter()); 
    mPager.setOnPageChangeListener(new MOnPagerChangeListener()); 
    mLoader = ImageLoaderManager.getImageLoader(mContext); 
    mOptions = ImageLoaderManager.getCacheOnDiskOptions(mContext); 
    init(); 
//    DisplayMetrics dm = mContext.getResources().getDisplayMetrics(); 
    mTitleHeight = ShowUtils.dip2px(48);//设置游标高度 
  } 
  @Override 
  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    ViewGroup.LayoutParams vp = getLayoutParams(); 
    if (vp != null) {  //设置视图的宽高 
      vp.width = mWidth; 
      vp.height = mHeight; 
    } 
    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
  } 
  private void initView() { 
    mPager = new ViewPager(mContext); 
    RelativeLayout.LayoutParams rp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT); 
    addView(mPager, rp); 
  } 
   
  private void initTipView() { 
    if (mTipView == null) { 
      RelativeLayout.LayoutParams rp = new RelativeLayout.LayoutParams(10, 10); 
      rp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);//显示在父控件的底部 
      rp.bottomMargin = mTitleHeight;//游标的高度 
      mTipView = new TipView(mContext, mDatas.size()); 
      addView(mTipView, rp); 
    } else { 
      mTipView.setCount(mDatas.size()); 
    } 
  } 
  @Override 
  public void upDate() { 
    getData(); 
  } 
  @Override 
  public void init() { 
    getData(); 
  } 
  @Override 
  public void startAnimation() { 
    if (mDatas.size() == 0) { 
      return; 
    } 
    Message msg = sHandler.obtainMessage(START_SCROLL); 
    msg.obj = mPager; 
    msg.arg1 = (mPager.getCurrentItem() + 1); 
    sHandler.sendMessageDelayed(msg, SHOW_TIME); 
  } 
  @Override 
  public void stopAnimation() { 
    sHandler.removeMessages(START_SCROLL); 
    sHandler.removeMessages(SCROLL_NEXT); 
  } 
   
  private void getData() { 
    String[] imageData = new String[]{"http://f.hiphotos.baidu.com/image/h%3D360/sign=e105b9f1d61b0ef473e89e58edc651a1/b151f8198618367a9f738e022a738bd4b21ce573.jpg", 
        "http://c.hiphotos.baidu.com/image/h%3D360/sign=b8cea9e92b738bd4db21b437918b876c/f7246b600c3387448982f948540fd9f9d72aa0bb.jpg", 
        "http://a.hiphotos.baidu.com/image/h%3D360/sign=3da95d01e7dde711f8d245f097eecef4/71cf3bc79f3df8dc39cb6295cf11728b461028c4.jpg", 
        "http://d.hiphotos.baidu.com/image/h%3D360/sign=410c3c96a60f4bfb93d09852334f788f/10dfa9ec8a136327a1de913a938fa0ec08fac78c.jpg", 
        "http://e.hiphotos.baidu.com/image/h%3D360/sign=f6600b1613dfa9ece22e501152d1f754/342ac65c10385343ff41ee2b9113b07eca808829.jpg"}; 
    for (int i = 0; i < 5; i++) { 
      HeadViewEntity info = new HeadViewEntity(); 
      info.setImageUrl(imageData[i]); 
      info.setTitle("我不做大哥好多年"+i); 
      info.setUrl("www.baidu.com"); 
      mDatas.add(info); 
    } 
    sHandler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
        stopAnimation(); 
        initTipView(); 
        mPager.setAdapter(new RecommendAdapter()); 
        mPager.setCurrentItem(10000 * mDatas.size());//一开始设置成这样的话就可以向左无限滚动了 
      } 
    },2000); 
  } 
   
  private class RecommendAdapter extends PagerAdapter { 
     
    @Override 
    public Object instantiateItem(ViewGroup container, int position) { 
      int curPos = position % mDatas.size(); 
      View view = View.inflate(mContext, R.layout.layout_recommend_item, null); 
      ViewGroup.LayoutParams vp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); 
      ImageView iv = (ImageView) view.findViewById(R.id.iv_pic); 
      TextView tv = (TextView) view.findViewById(R.id.tv_desc); 
      tv.setText(mDatas.get(curPos).getTitle()); 
      mLoader.displayImage(mDatas.get(curPos).getImageUrl(), iv, mOptions); 
      container.addView(view, vp); 
      view.setTag(curPos); 
      view.setOnClickListener(new OnClickListener() { 
        @Override 
        public void onClick(View v) { 
        } 
      }); 
      return view; 
    } 
    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
      container.removeView((View) object); 
    } 
    @Override 
    public int getCount() { 
      return Integer.MAX_VALUE; 
    } 
    @Override 
    public boolean isViewFromObject(View view, Object o) { 
      return view == o; 
    } 
  } 
  private class MOnPagerChangeListener implements ViewPager.OnPageChangeListener { 
    private int curState; 
    @Override 
    public void onPageScrolled(int i, float v, int i1) { 
    } 
    @Override 
    public void onPageScrollStateChanged(int i) { 
      curState = i; 
      if(i == ViewPager.SCROLL_STATE_DRAGGING){  //viewpager正在被拖动的时候 
        stopAnimation(); 
      }else { //没有可执行消息时候添加消息 实现自动滚动 
        if(!(sHandler.hasMessages(START_SCROLL)&&sHandler.hasMessages(SCROLL_NEXT))){ 
          startAnimation(); 
        } 
      } 
    } 
    @Override 
    public void onPageSelected(final int i) {  //页面跳转后得到调用 
      sHandler.removeMessages(SCROLL_NEXT); 
      sHandler.removeMessages(START_SCROLL); 
      if(curState == ViewPager.SCROLL_STATE_DRAGGING){ 
        return; 
      } 
      Message msg = sHandler.obtainMessage(SCROLL_NEXT); 
      msg.arg1 = i + 1; 
      msg.obj = mPager; 
      sHandler.sendMessageDelayed(msg, SHOW_TIME); 
      mTipView.setCurPostion(i % mDatas.size()); 
    } 
  } 
   
  private class TipView extends View { 
    private int mPadding; 
    private int mCount; 
    private int mCurPos; 
    private Paint mNorPaint;//未被选中的颜色 
    private Paint mSelPaint;//被选中的颜色 白色 
    private int mHeight; 
    public TipView(Context context, int count) { 
      super(context); 
      mNorPaint = new Paint(); 
      mNorPaint.setAntiAlias(true); 
      int selHeight = ShowUtils.dip2px(2); 
      int norHeight = ShowUtils.dip2px(1); 
      mHeight = ShowUtils.dip2px(2); 
      mNorPaint.setStrokeWidth(norHeight); 
      mNorPaint.setColor(Color.argb(80, 255, 255, 255)); 
      mSelPaint = new Paint(); 
      mSelPaint.setAntiAlias(true); 
      mSelPaint.setStrokeWidth(selHeight); 
      mSelPaint.setColor(Color.WHITE); 
      mCount = count; 
      mPadding = ShowUtils.dip2px(0); 
    } 
    @Override 
    protected void onDraw(Canvas canvas) { 
      super.onDraw(canvas); 
      int ow = (getWidth()-2 * mPadding)/ mCount; 
      int y = getHeight() / 2; 
      canvas.drawLine(mPadding, y, mCurPos * ow + mPadding, y, mNorPaint); 
      canvas.drawLine(mCurPos * ow + mPadding, y, (mCurPos + 1) * ow + mPadding, y, mSelPaint); 
      canvas.drawLine((mCurPos + 1) * ow + mPadding, y, getWidth() - mPadding, y, mNorPaint); 
    } 
    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
      ViewGroup.LayoutParams vp = getLayoutParams(); 
      vp.width = ViewGroup.LayoutParams.MATCH_PARENT; 
      vp.height = mHeight; 
      super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    } 
    public void setCurPostion(int pos) { 
      mCurPos = pos; 
      invalidate(); 
    } 
    public void setCount(int count) { 
      mCount = count; 
    } 
  } 
} 

然后提供了一个接口调用:


 
public interface IRecommend { 
  void upDate(); 
  void init(); 
  void startAnimation(); 
  void stopAnimation(); 
}

图片的加载用到了ImageLoad库:


import android.content.Context; 
import android.graphics.Bitmap; 
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiskCache; 
import com.nostra13.universalimageloader.core.DisplayImageOptions; 
import com.nostra13.universalimageloader.core.ImageLoader; 
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; 
import com.nostra13.universalimageloader.core.assist.ImageScaleType; 
import com.papau.show.constant.Constants; 
import java.io.File; 
public class ImageLoaderManager { 
   
  public static synchronized DisplayImageOptions getCacheOnMemoryOptions(Context context) { 
    DisplayImageOptions options = new DisplayImageOptions.Builder() 
        .cacheInMemory(true) 
        .cacheOnDisk(false) 
        .imageScaleType(ImageScaleType.EXACTLY_STRETCHED) 
        .bitmapConfig(Bitmap.Config.ARGB_8888) 
//        .showImageOnLoading( 
//            context.getResources().getDrawable( 
//                R.drawable.loading_wait)) 
//        .showImageOnFail( 
//            context.getResources().getDrawable( 
//                R.drawable.loading_wait)) 
        .build(); 
    return options; 
  } 
  public static synchronized DisplayImageOptions getCircleOptions(Context context) { 
    DisplayImageOptions options = new DisplayImageOptions.Builder() 
        .cacheInMemory(true) 
        .cacheOnDisk(false) 
        .imageScaleType(ImageScaleType.EXACTLY_STRETCHED) 
        .bitmapConfig(Bitmap.Config.ARGB_8888) 
//        .showImageOnLoading( 
//            context.getResources().getDrawable( 
//                R.drawable.ic_user_head_hint)) 
//        .showImageOnFail( 
//            context.getResources().getDrawable( 
//                R.drawable.ic_user_head_hint)) 
        .build(); 
    return options; 
  } 
   
  public static synchronized DisplayImageOptions getCacheOnDiskOptions( 
      Context context) { 
    DisplayImageOptions options = new DisplayImageOptions.Builder() 
        .cacheInMemory(true) 
        .cacheOnDisk(true) 
        .imageScaleType(ImageScaleType.EXACTLY) 
        .bitmapConfig(Bitmap.Config.ARGB_8888) 
//        .showImageOnLoading( 
//            context.getResources().getDrawable( 
//                R.drawable.loading_wait)) 
//        .showImageOnFail( 
//            context.getResources().getDrawable( 
//                R.drawable.loading_wait)) 
        .build(); 
    return options; 
  } 
   
  public static synchronized ImageLoader getImageLoader(Context context) { 
    ImageLoader imageLoader = ImageLoader.getInstance(); 
    File cacheDir = new File(Constants.sPicCacheLocalPath); 
    ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder( 
        context).diskCache(new UnlimitedDiskCache(cacheDir)) 
        .threadPoolSize(3) 
        .diskCacheExtraoptions(480, 320, null) 
        .build(); 
    imageLoader.init(config); 
    return imageLoader; 
  } 
} 

使用方法


DisplayMetrics dm = getActivity().getResources().getDisplayMetrics(); 
    RecommendView rv = new RecommendView(getActivity(),dm.widthPixels ,(dm.widthPixels)/2); 
    headViewPager.addView(rv); 

以上所述是小编给大家介绍的Android简单实现无限滚动自动滚动的ViewPager,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程网网站的支持!

您可能感兴趣的文章:Android 使用ViewPager自动滚动循环轮播效果Android 使用viewpager实现无限循环(定时+手动)Android viewpager中动态添加view并实现伪无限循环的方法Android ViewPager无限循环实现底部小圆点动态滑动Android ViewPager实现无限循环效果Android实现带指示点的自动轮播无限循环效果Android实战打飞机游戏之无限循环的背景图(2)Android仿开心消消乐大树星星无限循环效果Android实现基于ViewPager的无限循环自动播放带指示器的轮播图CarouselFigureView控件Android ViewPager实现智能无限循环滚动回绕效果


--结束END--

本文标题: Android简单实现无限滚动自动滚动的ViewPager

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

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

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

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

下载Word文档
猜你喜欢
  • Android简单实现无限滚动自动滚动的ViewPager
    经常我们会在应用中看到一个可以自动滚动,并且无限滚动的一个ViewPager,百度谷歌上面也有很多关于这方面的教程,但是感觉都略显麻烦,而且封装的都不是很彻底。所以试着封装一个...
    99+
    2022-06-06
    自动 viewpager Android
  • Android ViewPager怎么去实现无限循环滚动回绕效果
    不懂Android ViewPager怎么去实现无限循环滚动回绕效果?其实想解决这个问题也不难,下面让小编带着大家一起学习怎么去解决,希望大家阅读完这篇文章后大所收获。android系统提供的ViewPager标准方式是左右可以自由滑动,但...
    99+
    2023-05-30
    android viewpager 滚动效果
  • 简单实现Android滚动公告栏
    实现的效果,是一个滚动的公告栏,是这样的: 可以看到这个公告栏一方面是滚动,另外一方面是可点击。 实现的思路: 1.textView放在ViewFlipper中实现滑动效果(...
    99+
    2022-06-06
    公告栏 Android
  • vue实现简单无缝滚动效果
    本文实例为大家分享了vue实现简单无缝滚动的具体代码,供大家参考,具体内容如下 效果 实现思路 在vue中如何复制一份列表出来呢且不能丢失绑定的事件,很简单使用slot插槽,使用...
    99+
    2022-11-13
  • 简单方法实现Vue 无限滚动组件示例
    目录1. 前言2. 整体思路开始3. 钩子函数3.1 获取偏移初始位置的像素值3.2 获取开始滚动和结束滚动的钩子函数4. 完整代码1. 前言 对于列表类型的大量数据,前端展示往往采...
    99+
    2022-11-13
    Vue 无限滚动组件 Vue 滚动组件
  • Android代码实现AdapterViews和RecyclerView无限滚动
    应用的一个共同的特点就是当用户欢动时自动加载更多的内容,这是通过用户滑动触发一定的阈值时发送数据请求实现的。 相同的是:信息实现滑动的效果需要定义在列表中最后一个可见项,和某...
    99+
    2022-06-06
    recyclerview Android
  • javascript实现简单滚动窗口
    本文实例为大家分享了javascript实现滚动窗口的具体代码,供大家参考,具体内容如下 一.实现的效果图 二.涉及到的知识点 window.open();方法用于打开一个新的浏览...
    99+
    2022-11-12
  • vue实现无限消息无缝滚动
    本文实例为大家分享了vue实现无限消息无缝滚动的具体代码,供大家参考,具体内容如下 一、html <div class="table_box">    <div c...
    99+
    2022-11-13
  • vue怎么实现简单无缝滚动效果
    本篇内容介绍了“vue怎么实现简单无缝滚动效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!效果实现思路在vue中如何复制一份列表出来呢且不...
    99+
    2023-06-29
  • 基于Vue实现卡片无限滚动动画
    目录概要设计详细设计进阶功能功能分析概要设计详细设计完整代码概要设计 设置css的animation在适当的时间点重置动画来现实视觉上无限滚动的效果。 详细设计 计算动画中所需预设的...
    99+
    2022-11-13
  • Android实现横向无限循环滚动的单行弹幕效果
    本期将带领大家实现一个这样的效果,支持无限循环的单行弹幕效果。 实现思路分析 要实现上面的效果,我们先拆分下实现要素: 1、弹幕布局是从屏幕的右侧向左侧滚动,单个弹幕之间的间距是固...
    99+
    2022-11-12
  • android 实现ScrollView自动滚动的实例代码
    有时候需要动态添加数据,屏幕显示满了,数据需要滚动展示。这里主要弄懂scrollTo(0, off)方法的含义喊用法。 含义不说了,大概意思就这样。 下面来看他的用法: 代码...
    99+
    2022-06-06
    scrollview Android
  • vue3实现CSS无限无缝滚动效果
    本文实例为大家分享了vue3实现CSS无限无缝滚动效果的具体代码,供大家参考,具体内容如下 template 双层div嵌套,进行隐藏滚动显示 <div class="li...
    99+
    2022-11-12
  • android实现自动滚动的Gallary控件效果
    本文实例讲述了android实现自动滚动的Gallary控件。分享给大家供大家参考。具体如下: import java.util.Timer; import java.uti...
    99+
    2022-06-06
    自动 Android
  • Unity3d实现无限循环滚动背景
    在游戏项目中我们常常看到商城的广告牌,几张广告图片循环滚动,类似跑马灯,现在我将讨论一种实现方法,并提供一个管理类,大家可以直接使用。 实现原理:背景图片循环滚动的原理很简单:两张图...
    99+
    2022-11-12
  • react实现无限循环滚动信息
    本文实例为大家分享了react实现无限循环滚动信息的具体代码,供大家参考,具体内容如下 需求 后端传递过来的数据滚动显示,鼠标移入后停止滚动,鼠标移出后继续滚动,参考公司门户的公告信...
    99+
    2022-11-12
  • vue-seamless-scroll实现简单自动无缝滚动且添加对应点击事件的简单整理
    目录Vue 之 vue-seamless-scroll 实现简单自动无缝滚动,且添加对应点击事件的简单整理一、简单介绍二、安装和使用三、效果图四、vue-seamless-scrol...
    99+
    2023-01-03
    vue-seamless-scroll 无缝滚动 vue无缝滚动
  • vue怎么实现无限消息无缝滚动
    本篇内容主要讲解“vue怎么实现无限消息无缝滚动”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue怎么实现无限消息无缝滚动”吧!一、html<div class="t...
    99+
    2023-06-29
  • Unity UI组件ScrollRect实现无限滚动条
    在游戏开发中经常遇到滚动显示的数据,特别是商店商品 排行榜 .......等数据很多,每一条数据去加载一个UI来显示显然对内存浪费很大,这种情况处理一般就是用几个显示条可滚动循环显示...
    99+
    2022-11-12
  • 纯css3如何实现横向无限滚动
    小编给大家分享一下纯css3如何实现横向无限滚动,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!wxml装图片的盒子多复制一份,让循环图片的首尾相接<view...
    99+
    2023-06-08
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作