android - 更改油漆颜色时,现有笔划也会更改

标签 android colors paint

<分区>

我正在使用下面的代码捕获绘图。为了更改笔触颜色或宽度,我调用了 setPaintAttribute() 方法。但是当我改变颜色时,整个图画都会改变,包括我之前画的线条。我怎样才能改变油漆的颜色并保持以前的图纸不变?我尝试创建一个新路径,但之前的绘图消失了。

public void setPaintAttributes(float STROKE_WIDTH, int color)
    {
        paint=new Paint();
        paint.setAntiAlias(true);
        paint.setColor(color);
        paint.setStyle(Paint.Style.STROKE);
        paint.setStrokeJoin(Paint.Join.ROUND);
        paint.setStrokeWidth(STROKE_WIDTH);
    }
 public boolean onTouchEvent(MotionEvent event) {
        scrollView.requestDisallowInterceptTouchEvent(true);
        btnSaveSignature.setEnabled(true);
        btnSaveSignature.setBackgroundResource(R.drawable.save);
        float eventX = event.getX();
        float eventY = event.getY();           

        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            path.moveTo(eventX, eventY);
            lastTouchX = eventX;
            lastTouchY = eventY;
            return true;

        case MotionEvent.ACTION_MOVE:

        case MotionEvent.ACTION_UP:

            resetDirtyRect(eventX, eventY);
            int historySize = event.getHistorySize();
            for (int i = 0; i < historySize; i++) {
                float historicalX = event.getHistoricalX(i);
                float historicalY = event.getHistoricalY(i);
                path.lineTo(historicalX, historicalY);
            }
            path.lineTo(eventX, eventY);
            break;
        }

        invalidate((int) (dirtyRect.left - HALF_STROKE_WIDTH),
                (int) (dirtyRect.top - HALF_STROKE_WIDTH),
                (int) (dirtyRect.right + HALF_STROKE_WIDTH),
                (int) (dirtyRect.bottom + HALF_STROKE_WIDTH));

        lastTouchX = eventX;
        lastTouchY = eventY;

        return true;
    }

    private void resetDirtyRect(float eventX, float eventY) {
        dirtyRect.left = Math.min(lastTouchX, eventX);
        dirtyRect.right = Math.max(lastTouchX, eventX);
        dirtyRect.top = Math.min(lastTouchY, eventY);
        dirtyRect.bottom = Math.max(lastTouchY, eventY);
    }

最佳答案

创建一个包含一对路径和绘画的数组列表,然后将每个路径添加到数组列表,它对我有用,

ArrayList<Pair<Path, Paint>> paths = new ArrayList<Pair<Path, Paint>>();

使用如下:

    mCanvas = new Canvas();
    mPath = new Path();
    Paint newPaint = new Paint(mPaint);
    paths.add(new Pair<Path, Paint>(mPath, newPaint));

关于android - 更改油漆颜色时,现有笔划也会更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15143052/

相关文章:

java - Android 绘图、删除和撤消操作

svg - Flutter 在 CustomPaint (Canvas) 中绘制 SVG

android - 获取位于android studio for NDK项目中drawable的图像的绝对路径

java - REST GET 响应包含 HashMap 的对象

java - 如何在 Firebase 中注销我的 Google 帐户,以便在再次登录时可以选择我想要用来登录的帐户?

java - 如何使用Java Color制作渐变颜色白-棕-绿

java - 从 ARGB 颜色更改为 RRGGBB 颜色

android - 如何为 Android 开发 Web 服务

java - 如何改变JProgressbar的 "string painted"的颜色?

Java 不会从另一个类中绘制 paintComponent