及时只显示一种颜色

2023-12-04

我正在开发油漆应用程序,问题是当我选择颜色和油漆,然后选择不同的颜色时,整个油漆颜色会更改为新颜色,任何人都可以告诉我为什么会发生这种情况以及如何解决这个问题吗?以及如何添加橡皮擦? imageview DrawView在这里:

public class DrawView extends ImageView {
    private ArrayList<Point> mTouches;
    int paintColor;
    public int setcolor(int a){
        paintColor=a;
        return paintColor;}
    // Java constructor
    public DrawView(Context context) {
        super(context);
        init();}
    // XML constructor
    public DrawView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();}
    private void init() {
        mTouches = new ArrayList<Point>();}
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // Capture a reference to each touch for drawing
        float touchX = event.getX();
        float touchY = event.getY();
        mTouches.add(new Point(Math.round(touchX), Math.round(touchY)));
        return super.onTouchEvent(event);}
    @Override
    protected void onDraw(Canvas c) {
        // Let the image be drawn first
        super.onDraw(c);
        // Draw your custom points here
        Paint paint = new Paint();
        paint.setColor(paintColor);
        paint.setAntiAlias(true);
        paint.setStrokeWidth(5);
        paint.setStyle(Paint.Style.FILL);
        paint.setStrokeJoin(Paint.Join.ROUND);
        paint.setStrokeCap(Paint.Cap.ROUND);
        for (Point p : mTouches) {
            c.drawCircle( p.x, p.y,15,paint);}} }

在我的主要内容中:

im.setOnTouchListener(new View.OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                DrawView mcustomImagview = (DrawView) v;
                mcustomImagview.setcolor(color);
                mcustomImagview.invalidate();
                if (v.onTouchEvent(event)) {
// Do something with event.getX(), event.getY() }
                return true;}})

每次onDraw被调用时,整个画布被重画。由于您在自定义类中仅存储一种paintColor,因此仅使用最后选择的一种。

您需要将颜色与关联的点存储在一起。然后当你循环抛出你的mTouches数组,您可以更改当前点的颜色。

Btw the Paint对象可以更新,因此您不需要每次都创建它,因为在中创建新对象是一种不好的做法onDraw.

EDIT

public class DrawView extends android.support.v7.widget.AppCompatImageView {
    private ArrayList<ColouredPoint> mTouches;
    // Current used colour
    private int mCurrColour;
    private Paint mPaint;

    public void setColor(int colour) {
        mCurrColour = colour;
    }

    public DrawView(Context context) {
        super(context);
        init();
    }

    // XML constructor
    public DrawView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    private void init() {
        mTouches = new ArrayList<>();
        mPaint = new Paint();
        mPaint.setColor(mCurrColour);
        mPaint.setAntiAlias(true);
        mPaint.setStrokeWidth(5);
        mPaint.setStyle(Paint.Style.FILL);
        mPaint.setStrokeJoin(Paint.Join.ROUND);
        mPaint.setStrokeCap(Paint.Cap.ROUND);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // Capture a reference to each touch for drawing
        float touchX = event.getX();
        float touchY = event.getY();
        mTouches.add(new ColouredPoint(Math.round(touchX), Math.round(touchY), mCurrColour));

        return super.onTouchEvent(event);
    }

    @Override
    protected void onDraw(Canvas c) {
        // Let the image be drawn first
        super.onDraw(c);
        // Draw your custom points here
        for (ColouredPoint p : mTouches) {
            mPaint.setColor(p.colour);
            c.drawCircle(p.x, p.y, 15, mPaint);
        }
    }

    /**
     * Class to store the coordinate and the colour of the point.
     */
    private class ColouredPoint {
        int x;
        int y;
        int colour;

        public ColouredPoint(int x, int y, int colour) {
            this.x = x;
            this.y = y;
            this.colour = colour;
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

及时只显示一种颜色 的相关文章

随机推荐

  • UIScrollView:单击将其滚动到顶部

    我将 UIScrollView 的 pagingEnabled 设置为 YES 并以编程方式将其内容滚动到底部 CGPoint contentOffset scrollView contentOffset contentOffset y s
  • 如何使用 Android 后退按钮在我的应用程序中返回而不是关闭我的应用程序?

    我的应用程序有三个活动 A B 和 C 我通过 确定 按钮从 A 移动到 B 并且想使用 Android 设备的默认后退按钮从 B 移回 A 但是 当我按下按钮时 整个应用程序都会关闭 我该如何解决这个问题 我怀疑你打电话finish 在您
  • Tomcat 在 7.0.27 版本之后不支持 blazeds 流式传输?

    我发现我的 Flex 应用程序在 tomcat 版本 subject 之后不再工作 请帮助我解决这个问题 我尝试了很多事情但没有成功 这是我的配置 火焰 4 x Tomcat 最新 7 0 32 爪哇7 应用程序只是挂起 没有任何错误或任何
  • 数据库优先 - Mono 上的 EF6

    Context 我需要在我的本地计算机 Macbook 上运行一个 遗留 Net 应用程序 我们的大部分堆栈是 dotnetcore 但这个特定的应用程序有点旧 虽然我确实意识到可能只启动一个 Windows 虚拟机并在那里构建它会更容易
  • 在 Android 中哪里可以找到保存的图像?

    打扰一下 快速提问 我有这样的视频流例程 我接收数据包 将它们转换为 byte 然后转换为位图 然后将它们显示在屏幕上 dsocket receive packetReceived receive packet byte buff pack
  • 如何使向量的元素唯一? (删除不相邻的重复项)

    我有一个包含一些不相邻重复项的向量 作为一个简单的例子 请考虑 2 1 6 1 4 6 2 1 1 我正在尝试做这个vector通过删除不相邻的重复项并保持元素的顺序来保持唯一性 结果将是 2 1 6 4 我尝试的解决方案是 插入 std
  • 对贝塞尔曲线点进行动画处理

    我正在尝试对用 Paintcode 很棒的应用程序 顺便说一句 制作的贝塞尔曲线进行动画处理 并在 drawRect 方法中的自定义 UIView 中进行绘制 绘图工作正常 但我想为贝塞尔曲线中的单个点设置动画 这是我的非工作方法 void
  • 为什么 ng-content 选择器在 *ngFor 中不起作用

    这是 stackblitz 代码 如你看到的 div div ul number ul div div
  • 已分配值,从未使用过,但没有编译器消息

    整个程序采用 net Web 应用程序的 Web 形式 namespace WebApplication1 public partial class WebForm1 System Web UI Page protected void Pa
  • 从数据库中获取高于平均水平的学生

    我创建了一个视图 其中包含 student full name subject code result Jennifer Higgins CS1234 81 Jennifer Higgins CS1235 90 Kal Penn CS123
  • 致命错误:调用未定义的方法 mysqli::bind_param()

    我在这里挑不出毛病 你帮忙吗 这是我的错误 致命错误 调用未定义的方法 mysqli bind param 我不知道出了什么问题
  • R highcharts 多堆叠条形图

    我想绘制多个堆积条形图 但我不知道如何组合 r 代码 Closing Date Non Current Assets Current Assets Non Current Liabilities 2 2013 12 13637344 130
  • UITableView 从右到左对齐

    我正在为 iphone 3 0 开发一个阿拉伯语应用程序 我想知道是否有一种方法可以将 UITableViewCell 转换为从右到左 我希望一切都向相反的方向发展 有什么想法吗 创建您自己的 UITableViewCell 子类并不难 并
  • ConstraintLayout 对多个水平链的处理方式不同

    我正在尝试设置我认为应该是一个简单的布局ConstraintLayout我有一系列文本条目 其标签的大小可以根据语言的不同而变化 标签右侧有一个屏障 因此即使标签长度发生变化 文本条目也能保持对齐 我希望文本条目具有标称大小 在本示例中 顶
  • 如何在 Python Turtle 中导入图像?

    我想要的是获取一个图像来替换默认的海龟 就像这里所做的那样 http blog trinket io using images in turtle programs 这是我的代码 但我不知道为什么它不起作用 import turtle im
  • 单击通知不会启动活动

    我正在从服务创建通知 显示了通知 但是当我单击它时 没有任何反应 它应该打开一个活动 My code NotificationManager notificationManager NotificationManager getSystem
  • 使用 CORDA 流创建原子事务的最佳方法

    我有一个用例 我需要将数据发送给多个交易对手 但各方需要彼此保持匿名 从交易对手处收回背书后 我需要提交整个交易 整个事务的原子性需要保持 使用 Flows 实现这一目标的最佳方法是什么 为此 您需要使用机密身份 机密身份在状态中由Anon
  • Golang 中的货币格式使用来自 golang.org/x/text/currency 的currency.Symbol

    您好 我正在开发一个以货币格式格式化值的函数 我使用 golang org x text currency 来完成这项工作 但我得到的输出是逗号位置的点 没有千位分隔符 func produto Produto FormataPreco v
  • OSS 许可证插件在启动 OssLicensesMenuActivity 时崩溃

    每个人 我已经使用本教程包含了 Android OSS适用于 Android OSS 许可证的 Google API 进入我的项目 目标sdk版本是27 但我在开始时遇到一个问题Oss许可证菜单活动 我这样做如下 OssLicensesMe
  • 及时只显示一种颜色

    我正在开发油漆应用程序 问题是当我选择颜色和油漆 然后选择不同的颜色时 整个油漆颜色会更改为新颜色 任何人都可以告诉我为什么会发生这种情况以及如何解决这个问题吗 以及如何添加橡皮擦 imageview DrawView在这里 public