首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态改变ShapeDrawable的颜色

动态改变ShapeDrawable的颜色
EN

Stack Overflow用户
提问于 2016-02-02 17:04:42
回答 2查看 214关注 0票数 1

我有一个Canvas。当用户点击显示时,我使用ShapeDrawable在画布上画一个红色的圆圈。我将每个圆圈加到List<ShapeDrawable>中,称为hits。但我只想让最后一个圆圈变成红色,所有其他的都重新染成蓝色。

这是我的代码:

代码语言:javascript
复制
if (e.Event.Action == MotionEventActions.Up)
        {
            int x = (int) e.Event.GetX();
            int y = (int) e.Event.GetY();

            ShapeDrawable s = new ShapeDrawable(new OvalShape());
            s.Paint.Color = Color.Red;
            s.SetIntrinsicWidth(30);
            s.SetIntrinsicHeight(30);

            double widthRatio = canvas.Width/(double) imageView.Width;
            double heightRatio = canvas.Height/(double) imageView.Height;

            s.SetBounds((int) (x*widthRatio - 15), (int) (y*heightRatio - 15), (int) (x*widthRatio + 15),
                (int) (y*heightRatio + 15));

            s.Draw(canvas);
            foreach (var shapeDrawable in hits)
            {
                shapeDrawable.Paint.Color = Color.Blue;
                shapeDrawable.InvalidateSelf();
            }
            hits.Add(s);
            imageView.Invalidate();
        }

但颜色并没有改变。请问我做错什么了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-11 10:38:46

如果有人在寻找同一个问题的答案,下面是我解决这个问题的方法。我认为不可能改变已经在Canvas上使用的东西。因此,我被迫创建一个从ImageView继承的自定义视图,该视图有一个位图作为背景,我保存了每个被触摸到List的点,并重写了onDraw(Canvas canvas),在这里,我使用特定的Paint重新绘制List中的每个点。

票数 0
EN

Stack Overflow用户

发布于 2016-02-02 17:21:51

代替你的台词

代码语言:javascript
复制
s.Paint.Color = Color.Red;

shapeDrawable.Paint.Color = Color.Blue;

尝试以下几点:

代码语言:javascript
复制
s.FillStyle = FillStyle.Solid;
s.FillColor = Color.Red;

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35159531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档