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的可以看简介联系我,也可以私信我,我每天都看私信的