Android中奖列表滚动效果

92 阅读2分钟
Android中奖列表滚动效果

一幕幕滚动中奖记录效果,中奖列表滚动效果

一、思路:

自定义SmoothScrollLayoutManager

二、效果图:

在这里插入图片描述

三、关键代码:
package com.cong.myviewtest.widgets;

import android.content.Context;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.LinearSmoothScroller;
import android.support.v7.widget.RecyclerView;
import android.util.DisplayMetrics;

public class SmoothScrollLayoutManager extends LinearLayoutManager {

    private float speed; // 滑动速度

    public SmoothScrollLayoutManager(Context context, float speed) {
        super(context);
        this.speed = speed;
    }

    @Override
    public void smoothScrollToPosition(RecyclerView recyclerView,
                                       RecyclerView.State state, final int position) {

        LinearSmoothScroller smoothScroller =
                new LinearSmoothScroller(recyclerView.getContext()) {
                    // 返回:滑过1px时经历的时间(ms)。
                    @Override
                    protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) {
                        return speed / displayMetrics.densityDpi;
                    }
                };

        smoothScroller.setTargetPosition(position);
        startSmoothScroll(smoothScroller);
    }

}

package com.cong.myviewtest;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.view.WindowManager;

import com.cong.myviewtest.adapter.MoveAdapter;
import com.cong.myviewtest.widgets.AutoScrollRecyclerView;
import com.cong.myviewtest.widgets.SmoothScrollLayoutManager;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class SecondActivity extends AppCompatActivity {

    AutoScrollRecyclerView rlvContent;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        rlvContent = findViewById(R.id.rlv_content);

        rlvContent.setLayoutManager(new SmoothScrollLayoutManager(this,7500f));
        List<String> contents = new ArrayList<>();
        contents.add("小明   抽到666");
        contents.add("小红   抽到233");
        contents.add("小花   抽到777");
        contents.add("小金   谢谢参与");
        contents.add("小明1   抽到666");
        contents.add("小红1   抽到233");
        contents.add("小花1   抽到777");
        contents.add("小金1   谢谢参与");
        contents.add("小明2   抽到666");
        contents.add("小红2   抽到233");
        contents.add("小花2   抽到777");
        contents.add("小金2   谢谢参与");
        contents.add("小明   抽到完结");
        rlvContent.setAdapter(new MoveAdapter(contents));
        rlvContent.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
                /**
                 *  newState当前滚动状态
                 * (静止没有滚动) RecyclerView.SCROLL_STATE_IDLE = 0
                 * (正在被外部拖拽,一般为用户正在用手指滚动)  RecyclerView.SCROLL_STATE_DRAGGING = 1
                 * (自动滚动,手指离开控件后的惯性滚动)  RecyclerView.SCROLL_STATE_SETTLING = 2
                 */
            }

            @Override
            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
                super.onScrolled(recyclerView, dx, dy);
                /**
                 * dx > 0 时为手指向左滚动,列表滚动显示右面的内容
                 * dx < 0 时为手指向右滚动,列表滚动显示左面的内容
                 * dy > 0 时为手指向上滚动,列表滚动显示下面的内容
                 * dy < 0 时为手指向下滚动,列表滚动显示上面的内容
                 */
                if(dx == 0 && dy == 0){
                    recyclerView.smoothScrollToPosition(Integer.MAX_VALUE);
                }
            }
        });
    }
}
四、项目demo源码结构图:

在这里插入图片描述
有问题或者需要完整源码demo的可以看简介联系我,也可以私信我,我每天都看私信的