首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何设置com.yarolegovich.discretescrollview.DiscreteScrollView的自动水平滚动

如何设置com.yarolegovich.discretescrollview.DiscreteScrollView的自动水平滚动
EN

Stack Overflow用户
提问于 2019-09-21 00:35:08
回答 3查看 728关注 0票数 0

在app/build.gradle:

代码语言:javascript
复制
implementation 'com.github.bumptech.glide:glide:4.9.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
    implementation 'com.yarolegovich:discrete-scrollview:1.4.9'

在我的代码片段中:

代码语言:javascript
复制
private void initSlider() {
        List<String> serviceUrls = new ArrayList<String>();
        serviceUrls.add("http://www.gravatar.com/avatar/44444?s=48x48&d=identicon");
        serviceUrls.add("http://www.gravatar.com/avatar/33333?s=48x48&d=identicon");
        serviceUrls.add("http://www.gravatar.com/avatar/11111?s=48x48&d=identicon");
        serviceUrls.add("http://www.gravatar.com/avatar/22222?s=48x48&d=identicon");
        DiscreteScrollView scrollView = findViewById(R.id.picker);
        InfiniteScrollAdapter wrapper = InfiniteScrollAdapter.wrap(new AgentServiceAdapter(serviceUrls));
        scrollView.setAdapter(wrapper);
        scrollView.setSlideOnFling(true);
    }

在xml中

代码语言:javascript
复制
<com.yarolegovich.discretescrollview.DiscreteScrollView
                        android:id="@+id/picker"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        app:dsv_orientation="horizontal" />

因此,它会显示图像,并通过水平滑动滚动图像。好的。这是工作。但我需要在显示scrooView时自动开始水平滚动。

有可能吗?

EN

回答 3

Stack Overflow用户

发布于 2019-09-21 05:09:28

您可以通过使用带计时器的处理程序来安排对scrollView.smoothScrollToPosition(positon)的调用。

代码语言:javascript
复制
int NUM_TOTAL_ITEMS = itemList.size(); // you can use itemView.getPosition()
int position = 0;
final Runnable r = new Runnable() {
public void run() {
    handler.postDelayed(this, 1000);
    if (position == NUM_TOTAL_ITEMS - 1) {
        position = 0;
    }
    scrollView.smoothScrollToPosition(positon);
    position++;
   }
};
票数 1
EN

Stack Overflow用户

发布于 2019-09-21 16:00:01

我找到了这个解决方案:

代码语言:javascript
复制
private DiscreteScrollView discreteScrollView;
    private Handler timerHandler = new Handler();
    private Runnable timerRunnable;

    timerRunnable = new Runnable() {
                @Override
                public void run() {
                    discreteScrollView.smoothScrollBy(5, 0); // 5 is how many pixels you want it to scroll horizontally by
                    timerHandler.postDelayed(this, 10); // 10 is how many milliseconds you want this thread to run
                }
            };
            timerHandler.postDelayed(timerRunnable, 0);
票数 0
EN

Stack Overflow用户

发布于 2020-12-17 19:09:39

a_subscriber answer中的一些修改。他的解决方案是不断移动,我为1个项目添加了移动,然后停止,然后移动。您可以根据需要进行更改。

代码语言:javascript
复制
var delay = 100L

val displayMetrics = DisplayMetrics()
activity!!.windowManager.defaultDisplay.getMetrics(displayMetrics)
val height: Int = displayMetrics.heightPixels
var width= displayMetrics.widthPixels
var pixelPersentage= (width*0.05).roundToInt()
width -= pixelPersentage * 4
var pixel=pixelPersentage

try {
        timerRunnable = object : Runnable {
            override fun run() {
                try {
                    if(pixel>width){
                        delay=3000
                        pixel=widthPers
                    }
                    else {
                        pixel += widthPers
                        delay=100
                    }
                    sliderLayout.smoothScrollBy(
                        pixelPersentage,
                        0
                    ) 
                    timerHandler.postDelayed(
                        this,
                        delay
                    ) 
                } catch (e: Exception) {
                }
            }
        }
        timerHandler.postDelayed(timerRunnable, 3000)
  } catch (e: Exception) {

  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58032201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档