Как запрограммировать EraserPaint, как на холсте в Android? - PullRequest
1 голос
/ 16 ноября 2011

У меня есть холст и краски для рисования на холсте. я могу рисовать на холсте другим цветом.

Теперь, если есть белый простой фон, тогда все в порядке. Я использую белый цвет для Erase и его работа отлично. Но если на заднем плане есть какое-либо изображение, и если я выбрал ластик (как белый цвет), то это изображение белого цвета на изображении.

Вместо того, что я хочу, пока я выбираю ластик, и если на заднем плане есть какое-либо изображение, то ластик должен стереть краску и показать изображение. , Так может ли anybudy помочь мне, как реализовать это ?? Спасибо.

Отредактировано: Я использую код ниже, чтобы стереть краску. Но все еще не в состоянии стереть его.

case R.id.eraserBtn:
            currentPaint = new Paint();
            currentPaint.setAlpha(0);         
            currentPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));         
            currentPaint.setAntiAlias(true);

            //currentPaint.setColor(0x00000000);
            currentPaint.setDither(true);
            currentPaint.setStyle(Paint.Style.STROKE);
            currentPaint.setStrokeJoin(Paint.Join.ROUND);
            currentPaint.setStrokeCap(Paint.Cap.ROUND);
            currentPaint.setStrokeWidth(3);
            break;

Новое редактирование:

 case R.id.eraserBtn:
            currentPaint = new Paint();
            currentPaint.setAlpha(0);         
            currentPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));         
            currentPaint.setAntiAlias(true);

            //currentPaint.setColor(0x00000000);
            currentPaint.setDither(true);
            currentPaint.setStyle(Paint.Style.STROKE);
            currentPaint.setStrokeJoin(Paint.Join.ROUND);
            currentPaint.setStrokeCap(Paint.Cap.ROUND);
            currentPaint.setStrokeWidth(15);
            break;

Другое Править:

      while (_run){

                try{
                    canvas = mSurfaceHolder.lockCanvas(null);
                    if(mBitmap == null){
                        mBitmap =  Bitmap.createBitmap (1, 1, Bitmap.Config.ARGB_8888);
                    }
                    final Canvas c = new Canvas (mBitmap);
                    //canvas.drawColor(0, PorterDuff.Mode.CLEAR);
                    c.drawColor(0, PorterDuff.Mode.CLEAR);
                    //canvas.drawColor(mColor);// Edited by Shreyash
                    c.drawColor(mColor);

//                    Bitmap kangoo = BitmapFactory.decodeResource(getResources(),R.drawable.icon);
//                      canvas.drawBitmap (kangoo, 0,  200,null);

//                  works for logo                  
//                  Bitmap kangoo = BitmapFactory.decodeResource(getResources(),R.drawable.icon);
//                  c.drawBitmap (kangoo, 0,  200,null);

                    if(!(DrawingActivity.imagePath==null)){
                        c.drawBitmap(DrawingActivity.mBitmap, 0, 0, null);
                    }
                    commandManager.executeAll(c);
                    canvas.drawBitmap (mBitmap, 0,  0,null);

                } finally {
                    mSurfaceHolder.unlockCanvasAndPost(canvas);
                }
            }

Ответы [ 2 ]

2 голосов
/ 16 ноября 2011

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

  1. http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/FingerPaint.html
  2. http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/TouchPaint.html
  3. Лучший (как я предлагаю): http://som -itsolutions.blogspot.com / 2010/12 / freeware-android-paint.html
2 голосов
/ 16 ноября 2011

Вы должны установить setXfermode для объекта рисования и посмотреть на разные PorterDuffModes.

Это должно оказаться полезным для вас: Удалить части растрового изображения в режиме PorterDuff

...