Circular RecyclerView - 在滚动条上旋转和平移列表项
Circular RecyclerView - Rotate and Translate list items on scroll
在滚动时,我想旋转和平移这些列表项,使它们仍然以循环方式存在。我制作了一个自定义视图,并使用这种旋转和平移来覆盖这些方法 Here。但是旋转有点奇怪而且不是圆形的。
这就是我想要实现的
@Override
protected void dispatchDraw(Canvas canvas) {
canvas.save();
int top = getTop();
float rotate = calculateAngle(top, recyclerViewHeight);
Matrix m = canvas.getMatrix();
m.preTranslate(-2 / getWidth(), -2 / getHeight());
m.postRotate(rotate);
m.postTranslate(2 / getWidth(), 2 / getHeight());
canvas.concat(m);
super.dispatchDraw(canvas);
canvas.restore();
}
private float calculateAngle(int top, float height) {
float result = 0f;
float fullAngleFactor= 60f;
if (top < height / 2f) {
result = (top - (height / 2f)) / (height / 2f) * fullAngleFactor;
} else if (top > height / 2f) {
result = (top - (height / 2f)) / (height / 2f) * fullAngleFactor;
}
return result;
}
我使用 this 库来实现相同的行为。无需创建任何自定义视图并覆盖 onDraw() 或 onDispatchDraw()。我使用了这个布局管理器配置:
layoutManager = new CircleLayoutManager.Builder(this)
.setRadius(900)
.setAngleInterval(30)
.setDistanceToBottom(-350)
.setGravity(CircleLayoutManager.LEFT)
.build();
在滚动时,我想旋转和平移这些列表项,使它们仍然以循环方式存在。我制作了一个自定义视图,并使用这种旋转和平移来覆盖这些方法 Here。但是旋转有点奇怪而且不是圆形的。 这就是我想要实现的
@Override
protected void dispatchDraw(Canvas canvas) {
canvas.save();
int top = getTop();
float rotate = calculateAngle(top, recyclerViewHeight);
Matrix m = canvas.getMatrix();
m.preTranslate(-2 / getWidth(), -2 / getHeight());
m.postRotate(rotate);
m.postTranslate(2 / getWidth(), 2 / getHeight());
canvas.concat(m);
super.dispatchDraw(canvas);
canvas.restore();
}
private float calculateAngle(int top, float height) {
float result = 0f;
float fullAngleFactor= 60f;
if (top < height / 2f) {
result = (top - (height / 2f)) / (height / 2f) * fullAngleFactor;
} else if (top > height / 2f) {
result = (top - (height / 2f)) / (height / 2f) * fullAngleFactor;
}
return result;
}
我使用 this 库来实现相同的行为。无需创建任何自定义视图并覆盖 onDraw() 或 onDispatchDraw()。我使用了这个布局管理器配置:
layoutManager = new CircleLayoutManager.Builder(this)
.setRadius(900)
.setAngleInterval(30)
.setDistanceToBottom(-350)
.setGravity(CircleLayoutManager.LEFT)
.build();