Android 如何在运行时更改自定义视图颜色?

Android 如何在运行时更改自定义视图颜色?,android,view,drawable,Android,View,Drawable,我的类定义如下: public class Island extends View { private ShapeDrawable mDrawable; public Island(Context context) { super(context); int width = 50; int height = 50; mDrawable = new ShapeDrawable(new OvalShape());

我的类定义如下:

public class Island extends View {
    private ShapeDrawable mDrawable;

    public Island(Context context) {
        super(context);
        int width = 50;
        int height = 50;

        mDrawable = new ShapeDrawable(new OvalShape());
        mDrawable.getPaint().setColor(0xff74AC23);
        mDrawable.setBounds(0, 0, width, height);
    }

    public void change() {
        mDrawable.getPaint().setColor(Color.BLACK);
    }

    protected void onDraw(Canvas canvas) {
        mDrawable.draw(canvas);
    }

当我调用对象上的change()时,为什么形状不会改变颜色?谢谢。

您需要调用invalidate以便视图知道它需要重新绘制

您需要调用invalidate以便视图知道它需要重新绘制

假设您的对象是, 岛屿=新岛屿(上下文)

要更新视图,您可以调用island.onDraw() 或 岛。无效()

如果您正在从另一个线程更改此设置,则可以使用postInvalidate()方法。

假设您的对象是, 岛屿=新岛屿(上下文)

要更新视图,您可以调用island.onDraw() 或 岛。无效()


如果您要从另一个线程更改此内容,则可以使用postInvalidate()方法。

就是这样,谢谢。以前,我试图在绘图表本身上调用invalidateself(),但在视图上调用invalidate()效果很好。谢谢,就这样,谢谢。以前,我试图在绘图表本身上调用invalidateself(),但在视图上调用invalidate()效果很好。谢谢