Как изменить цвет стирания по умолчанию в приложении рисования в Android? - PullRequest
6 голосов
/ 30 марта 2012

Я делаю приложение, в котором я хочу стереть рисование линий с событием.Для этого я использовал

mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));

, но во время стирания линии эта линия сначала становится черной, а затем стирается.Я хочу прозрачный цвет, чтобы стереть рисунок.

Ответы [ 3 ]

1 голос
/ 30 апреля 2013

Я прошел через FingerPaint.java с APIDemos т.е. android-sdk\samples\android-17\ApiDemos

и изменил

@Override
protected void onDraw(Canvas canvas) {
    canvas.drawColor(0xFFAAAAAA);

    canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);

    canvas.drawPath(mPath, mPaint);
}

до

@Override
protected void onDraw(Canvas canvas) {
   canvas.drawColor(0xFFAAAAAA);

   canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);

   mCanvas.drawPath(mPath, mPaint);  // this line changed 
                                     // mCanvas is Canvas variable which is
                                     // initialized in onSizeChanged()
}

Теперь он не рисует черный цвет при стирании, все работает нормально.Не уверен, что это 100% правильный ответ, но он работает для меня.

0 голосов
/ 06 мая 2014

Нижеследующее работает для стирания на прозрачном фоне ...

Вызовите SetErase (true), чтобы начать стирание.

Затем метод OnDraw нарисует белый путь (вместо черного)который затем очистится до прозрачного цвета, и вы сохраните всю информацию об отмене пути.

Вызовите SetErase (), чтобы включить или выключить стирание

    public void SetErase(bool On)
    {
        if (On)
        {
            if (!_erasing)
            {
                _delpaint = new Paint(_paint);
                _delpaint.Color = Color.White; 
                _paint.SetXfermode(new PorterDuffXfermode(PorterDuff.Mode.Clear));
                _erasing = true;
            }
        }
        else if (_erasing)
        {
            _erasing = false;
            _paint.SetXfermode(null);
        }
    }

    protected override void OnDraw(Canvas canvas)
    {
        canvas.DrawColor(BackgroundColor);
        canvas.DrawBitmap(CanvasBitmap, 0, 0, _bitmapPaint);
        if (_erasing)
        {
            canvas.DrawPath(_path, _delpaint); // draw white path
        }
        else
        {
            canvas.DrawPath(_path, _paint);
        }
    }
0 голосов
/ 23 сентября 2013

Эй, я использовал своего рода трюк для удаления черной линии. В моей кнопке стирания я установил белый цвет вместо использования XferMode ..

if(erase){
paintColor = Color.parseColor(newColor);
drawPaint.setColor(paintColor);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...