gpt4 book ai didi

android - 在自定义 View 的状态更改时更改颜色

转载 作者:行者123 更新时间:2023-11-30 02:27:34 33 4
gpt4 key购买 nike

我有一个自定义的 View,它会覆盖 onDraw 并基本上使用 Canvas 绘制自定义形状。我想在触摸 View 时更改颜色。

环顾 StackOverflow,似乎是 preferred way for Buttons就是在android:state_pressedandroid:state_focused 上设置一个各种颜色的drawable selector list。然而,这种方法似乎对我不起作用,因为我自己绘制形状,颜色是在我自己的 Paint 对象上设置的。

这是我现在拥有的:

我使用简单的颜色属性设置自定义属性:

<declare-styleable name="CustomView">

<attr name="color" format="color"/>

</declare-styleable>

我在 CustomView 的构造函数中检索颜色,并设置一个 Paint:

private final Paint paint;

...

TypedArray conf = context.obtainStyledAttributes(
attributes,
R.styleable.CustomView
);
Resources resources = getResources();
int color = conf.getColor(
R.styleable.CustomView_color,
resources.getColor(R.color.blue)
);
paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setStyle(Paint.Style.FILL);
paint.setColor(color);

最后,我在onDraw中使用它:

canvas.drawPath(shapePath, paint);

我开始研究 ColorStateList ,但我不清楚如何将它集成到我的代码中。非常感谢任何有关如何为我的自定义 View 实现选择器列表功能的建议!

最佳答案

嗯,最简单的方法是在自定义 View 的触摸方法中更改 Paint 对象的颜色。

你可以像这样做得更多:

@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_DOWN:
paint.setColor(mPressedColor);
invalidate();
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
paint.setColor(mNormalColor);
invalidate();
break;
}
return super.onTouchEvent(event);
}

(其中 mPressedColormNormalColor 分别存储按下和正常颜色的 int 值)

关于android - 在自定义 View 的状态更改时更改颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27736585/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com