Android穿WearableListView ImageView选择器

时间:2014-08-03 16:49:58

标签: android android-listview wear-os

我正在尝试创建一个列表视图,如下所示: -

enter image description here

现在,我使用WearableListView适配器使列表视图成功运行。但是,我在ImageView中使用静态图像。我想要的是在滚动时聚焦特定列表元素时创建这种灰色和蓝色类型的动画。我怎么做?我尝试使用ImageView的选择器xml文件,但似乎这个ListView没有使用这个选择器(android:state-focused,selected,pressed-nothing works)。知道我怎么得到我想要的东西?希望我明白我的问题。感谢。

2 个答案:

答案 0 :(得分:2)

是的你是对的,图像选择器不起作用,为什么?我完全不知道,我们没有任何文件可供阅读。

但幸运的是,我已经成功实施了这个场景,它几乎与默认设置屏幕相似。

对于解决方法,我在方法下面设置了圆形颜色:

  1. onScaleUpStart() - 为所选项目设置圆圈颜色
  2. onScaleDownStart() - 为未选择的项目设置圆圈颜色。
  3. 我在项目布局中使用了CircleImageView和TextView。示例代码可以是:

    private final class MyItemView extends FrameLayout implements WearableListView.Item {
    
        final CircledImageView image;
        final TextView text;
        private float mScale;
        private final int mFadedCircleColor;
        private final int mChosenCircleColor;
    
        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);
            mFadedCircleColor = getResources().getColor(android.R.color.darker_gray);
            mChosenCircleColor = getResources().getColor(android.R.color.holo_blue_dark);
        }
    
        @Override
        public float getProximityMinValue() {
            return mDefaultCircleRadius;
        }
    
        @Override
        public float getProximityMaxValue() {
            return mSelectedCircleRadius;
        }
    
        @Override
        public float getCurrentProximityValue() {
            return mScale;
        }
    
        @Override
        public void setScalingAnimatorValue(float value) {
            mScale = value;
            image.setCircleRadius(mScale);
            image.setCircleRadiusPressed(mScale);
        }
    
        @Override
        public void onScaleUpStart() {
            image.setAlpha(1f);
            text.setAlpha(1f);
            image.setCircleColor(mChosenCircleColor);
        }
    
        @Override
        public void onScaleDownStart() {
            image.setAlpha(0.5f);
            text.setAlpha(0.5f);
            image.setCircleColor(mFadedCircleColor);
        }
    }
    

答案 1 :(得分:1)

新更新带来 WearableListView.OnCenterProximityListener 替代 WearableListView.Item ,以使用选择器实现可穿戴列表视图,

它有两种实现方法:

  1. onCenterPosition
  2. onNonCenterPosition

    public class WearableListItemLayout extends LinearLayout implements WearableListView.OnCenterProximityListener {
    
    private CircledImageView image;
    private TextView text;
    
    public WearableListItemLayout(Context context) {
        this(context, null);
    }
    
    public WearableListItemLayout(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }
    
    public WearableListItemLayout(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }
    
    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        image = (CircledImageView) findViewById(R.id.image);
        text = (TextView) findViewById(R.id.name);
    }
    
    @Override
    public void onCenterPosition(boolean b) {
        image.setAlpha(1f);
        image.setBackgroundResource(R.drawable.blue_oval);
        text.setAlpha(1f);
    }
    
    @Override
    public void onNonCenterPosition(boolean b) {
        image.setAlpha(0.5f);
        image.setBackgroundResource(R.drawable.gray_oval);
        text.setAlpha(0.5f);
    }
    }