【问题标题】:Android PorterDuff.Mode.CLEAR not working correctly when background is BLACK当背景为黑色时,Android PorterDuff.Mode.CLEAR 无法正常工作
【发布时间】:2012-07-09 11:25:45
【问题描述】:

我需要一些关于我正在使用的应用程序的帮助。我正在尝试创建一个绘画应用程序,几天前我注意到了一个问题,现在我决定进行一些研究来解决它。当我使用PorterDuff.Mode.CLEAR 将我的画笔用作橡皮擦时,它可以正常工作,而我的背景是白色的。但是,如果我将背景设置为其他颜色(例如黑色,例如:mCanvas.drawColor(Color.BLACK);)并且在我使用橡皮擦后,我使用橡皮擦的地方会被涂成白色。 这是我为橡皮擦设置变量的方法:

erase.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            stamp=false;
            MODE = ERASER_MODE;
            mPaint.setColorFilter(null);
            mPaint.setShader(null);
            mPaint.setMaskFilter(null);
            mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
        }
    });

所以有什么想法为什么会发生,我该如何解决这个问题?

提前致谢!

【问题讨论】:

    标签: android paint porter-duff


    【解决方案1】:

    实际上我发现我的问题在哪里。在我用于绘图等的自定义视图中,我正在这样做

     @Override
        protected void onSizeChanged(int w, int h, int oldw, int oldh) {
            super.onSizeChanged(w, h, oldw, oldh);
            mBitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
            mCanvas = new Canvas(mBitmap);
            mCanvas.drawColor(parentColor); //parentColor = currentBackgroundColor
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            canvas.drawColor(Color.WHITE);
            canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
            canvas.drawPath(mPath, mPaint);
        }
    

    我只需要改变我的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-05
      • 2015-04-23
      • 1970-01-01
      • 2023-02-09
      • 1970-01-01
      • 2020-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多