我想实现一个 ListView ,如下所示。
显然这是一个带有 CircledImageView 的 WearableListView。但是我似乎无法找到哪个函数可以让我确定中间 View 。我还希望能够在新的动画上做“放大”动画,在旧的选定动画上做“缩小”动画......现在我尝试了一个基本的滚动但没有雪茄。
mListView.addOnScrollListener(new WearableListView.OnScrollListener() {
@Override
public void onScroll(int i) {
Log.d("Recycler","Scroll: "+i);
}
@Override
public void onAbsoluteScrollChange(int i) {
Log.d("Recycler","ABsScrollChange: "+i);
}
@Override
public void onScrollStateChanged(int i) {
Log.d("Recycler","ScrollState: "+i);
}
@Override
public void onCentralPositionChanged(int i) {
Log.d("Recycler","Center: "+i);
}
});
编辑:好的,现在我知道如何找到中心 View 了。但我想知道是否有人想出如何检索当前 View ,以便我可以修改当前选定的 View 。
编辑 2 好的,现在我可以修改选定的 View 。但是,在取消选择对象后,仍然不知道如何正确删除属性。
最佳答案
诀窍是在 WearableListView.Item 子类中实现 getProximityMinValue() 和 getProximityMaxValue() :
private final class MyItemView extends FrameLayout implements WearableListView.Item {
final CircledImageView image;
final TextView text;
public MyItemView(Context context) {
super(context);
View.inflate(context, R.layout.wearablelistview_item, this);
image = (CircledImageView) findViewById(R.id.image);
text = (TextView) findViewById(R.id.text);
}
@Override
public float getProximityMinValue() {
return mDefaultCircleRadius;
}
@Override
public float getProximityMaxValue() {
return mSelectedCircleRadius;
}
@Override
public float getCurrentProximityValue() {
return image.getCircleRadius();
}
@Override
public void setScalingAnimatorValue(float value) {
image.setCircleRadius(value);
image.setCircleRadiusPressed(value);
}
@Override
public void onScaleUpStart() {
image.setAlpha(1f);
text.setAlpha(1f);
}
@Override
public void onScaleDownStart() {
image.setAlpha(0.5f);
text.setAlpha(0.5f);
}
}
完整的工作示例 source code here .
关于wear-os - 如何复制 "Start"菜单中的 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24617069/