圆形自动滚动horizo​​ntalscrollview android

soq*_*mab 7 android horizontalscrollview

我想自动滚动一个水平滚动视图,当它到达最后一个imageview时,在linearlayout中包含很多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();
Run Code Online (Sandbox Code Playgroud)

这里的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);
}   
Run Code Online (Sandbox Code Playgroud)

nvi*_*tty 17

我通过使用带有水平线性布局管理器的RecyclerView实现了类似的要求,这里的代码片段可以帮到你

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

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

    @Override
    public int getItemCount() {
        return Integer.MAX_VALUE;
    }
    
    Run Code Online (Sandbox Code Playgroud)

要获得适配器中的实际项目,可以使用这样的简单模数操作

@Override
public void onBindViewHolder(ActionItemViewHolder holder, int position) {
    position = position % ACTUAL_SIZE_OF_LIST;
};
Run Code Online (Sandbox Code Playgroud)

这是使它循环的技巧!

使您的RecyclerView滚动到索引,该索引是适配器getItemCount返回的值的一半,您可以通过以下代码实现此目的:

mLinearLayoutManager.scrollToPosition(Integer.MAX_VALUE / 2);

(这是一个简单的黑客)

我不明白你自动滚动的意思是什么,如果你希望这些项目在点击它时滚动到屏幕的中心就是代码

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

希望这对你有所帮助!