android - 圆形自动滚动 horizo​​ntalscrollview android

标签 android horizontalscrollview

我想自动滚动一个水平 ScrollView ,它在线性布局中包含很多 ImageView 当它到达最后一个 ImageView 时,第一个出现,依此类推

我找到了 this code这符合我的需要,但是当我添加了自动滚动时,循环功能将不起作用:当到达最后一个 ImageView 时,第一个 ImageView 将不会出现

这是我的代码:

slider = (RelativeLayout)findViewById(R.id.slider);
    RelativeLayout container = (RelativeLayout) findViewById(R.id.slider);
    scrollView = new PSInfiniteScrollView(this,new PSSize(120,120));
    for (int i = 0; i < 10; i++) {
        MyCloneableView img = new MyCloneableView(this);
        img.setId(i + 20);
        img.setImageResource(R.drawable.ic_launcher);
        img.setScaleType(ImageView.ScaleType.FIT_XY);
        img.setBackgroundColor(c[i]);
        img.setTag(c[i]);
        scrollView.addItem(img);
    }

    container.addView(scrollView);

    Thread t = new Thread(new Runnable() {
        @Override
        public void run() {
            doLoop();
        }
    });

    t.start();

这里是 doLoop 方法:

private void doLoop(){
    do {
        scrollView.scrollBy(2, 0);
        try {
            Thread.sleep(50);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        scrollView.scrollBy(2, 0);
        try {
            Thread.sleep(50);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }   while (true);
}   

最佳答案

我通过使用带有水平线性布局管理器的 RecyclerView 实现了类似的要求 以下是可能对您有所帮助的代码 fragment

  1. 要使 Recycler View 水平显示,请使用 LinearLayout 管理器并将其方向设置为水平

    mLinearLayoutManager = new LinearLayoutManager(context);
    mLinearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
    mRecyclerView.setLayoutManager(mLinearLayoutManager);
    
  2. 使其循环:在您的 Recycler View 适配器中,使 getItemCount 返回一个非常大的值,如 Integer.MAX_VALUE

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

要在适配器中获取实际项目,您可以使用像这样的简单模数运算

@Override
public void onBindViewHolder(ActionItemViewHolder holder, int position) {
    position = position % ACTUAL_SIZE_OF_LIST;
};

这是使它循环的技巧!

让你的 RecyclerView 滚动到一个索引,它是你的适配器 getItemCount 返回值的一半,你可以通过下面的代码实现这一点:

mLinearLayoutManager.scrollToPosition(Integer.MAX_VALUE/2);

(这是一个简单的 hack)

我不明白你所说的自动滚动到底是什么意思,如果你想让项目在点击它时滚动到屏幕中心,这里是代码

private void scrollToCenter(View v) {
    int itemToScroll = mRecyclerView.getChildPosition(v);
    int centerOfScreen = mRecyclerView.getWidth() / 2 - v.getWidth() / 2;
    mLayoutManager.scrollToPositionWithOffset(itemToScroll, centerOfScreen);
}

希望对你有帮助!

关于android - 圆形自动滚动 horizo​​ntalscrollview android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29693593/

相关文章:

android - 有没有办法专门为三星设备设置应用程序图标?

需要 Android 选项卡布局示例

java - 无法从 Firebase 检索数据。应用程序关闭 fragment

android - 带有箭头的 Horizo​​ntalScrollView

Android:如何在滚动 Horizo​​ntalScrollView 时禁用 ScrollView 的垂直滚动?

java - 每行类型有 2 种不同的布局

android - 在android上显示yuv420p

android - 如何在 Horizo​​ntalScrollView 中设置线性布局宽度?

ios - 向水平分页UIScrollView添加图片

android - 将 RelativeLayout View 膨胀为水平 ScrollView 会删除布局设置