在Android中的图像视图上绘制

3

我试图保存ImageView的光栅图像,但当我获取光栅图像时,背景颜色会变成黑色。我不确定发生了什么,但我把背景擦成白色,但每次保存到SQLite中并重新获取和设置它时,它都会改变为黑色。这是我的定制抽屉类。

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

public class MyDrawView extends View
{
public Bitmap mBitmap;
public Canvas mCanvas;
private Path mPath;
private Paint mBitmapPaint;
private Paint mPaint;

public MyDrawView(Context c, AttributeSet attrs)
{
    super(c, attrs);

    mPath = new Path();
    mBitmapPaint = new Paint(Paint.DITHER_FLAG);
    mPaint = new Paint();
    mPaint.setAntiAlias(true);
    mPaint.setDither(true);
    mPaint.setColor(Color.WHITE);
    mPaint.setStyle(Paint.Style.STROKE);
    mPaint.setStrokeJoin(Paint.Join.ROUND);
    mPaint.setStrokeCap(Paint.Cap.ROUND);
    mPaint.setStrokeWidth(9);

}

public void eraser()
{
    mPaint.setAntiAlias(true);
    mPaint.setDither(true);
    mPaint.setColor(Color.WHITE);
    mPaint.setStyle(Paint.Style.STROKE);
    mPaint.setStrokeJoin(Paint.Join.ROUND);
    mPaint.setStrokeCap(Paint.Cap.ROUND);
    mPaint.setStrokeWidth(22);
}

public void pen(int color, int size)
{
    mPaint.setAntiAlias(true);
    mPaint.setDither(true);
    mPaint.setColor(color);
    mPaint.setStyle(Paint.Style.STROKE);
    mPaint.setStrokeJoin(Paint.Join.ROUND);
    mPaint.setStrokeCap(Paint.Cap.ROUND);
    mPaint.setStrokeWidth(size);
}


@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh)
{
    super.onSizeChanged(w, h, oldw, oldh);
    mBitmap = Bitmap.createBitmap(w, h, Config.ARGB_8888);
    mCanvas = new Canvas(mBitmap);
}

@Override
protected void onDraw(Canvas canvas)
{
    canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
    canvas.drawPath(mPath, mPaint);


}

private float mX, mY;
private static final float TOUCH_TOLERANCE = 4;

private void touch_start(float x, float y)
{
    mPath.reset();
    mPath.moveTo(x, y);
    mX = x;
    mY = y;
}

private void touch_move(float x, float y)
{
    float dx = Math.abs(x - mX);
    float dy = Math.abs(y - mY);
    if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE)
    {
        mPath.quadTo(mX, mY, (x + mX) / 2, (y + mY) / 2);
        mX = x;
        mY = y;
    }
}

private void touch_up()
{
    mPath.lineTo(mX, mY);
    // commit the path to our offscreen
    mCanvas.drawPath(mPath, mPaint);
    // kill this so we don't double draw
    mPath.reset();
}

@Override
public boolean onTouchEvent(MotionEvent event)
{
    float x = event.getX();
    float y = event.getY();

    switch (event.getAction())
    {
        case MotionEvent.ACTION_DOWN:
            touch_start(x, y);
            invalidate();
            break;
        case MotionEvent.ACTION_MOVE:
            touch_move(x, y);
            invalidate();
            break;
        case MotionEvent.ACTION_UP:
            touch_up();
            invalidate();
            break;
    }
    return true;
}

public Bitmap getBitmap()
{
    //this.measure(100, 100);
    //this.layout(0, 0, 100, 100);
    this.setDrawingCacheEnabled(true);
    this.buildDrawingCache();
    Bitmap bmp = Bitmap.createBitmap(this.getDrawingCache());
    this.setDrawingCacheEnabled(false);


    return bmp;
}

public void clear()
{
    mBitmap.eraseColor(Color.WHITE);
    invalidate();
    System.gc();

}

}

在我的活动中,我有以下代码:

public class MainActivity extends AppCompatActivity { MyDrawView myDrawView; ImageView imageView; }

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    imageView = findViewById(R.id.img);
    myDrawView = findViewById(R.id.draw);


 myDrawView.setBackground(getResources()
   .getDrawable(R.drawable.bg_customer));
    Button button1 = findViewById(R.id.button1);
    button1.setOnClickListener(new View.OnClickListener()
    {
        public void onClick(View v)
        {
            Bitmap well = myDrawView.getBitmap();
            imageView.setImageBitmap(well);
            imageView.setOnClickListener(new View.OnClickListener()
            {
                @Override
                public void onClick(View view)
                {
                    //now save in room database 
                }
            });
        }
    });
}

}

当我保存我的画作时,背景变成了黑色(而不是图片),有人可以帮助我吗?

这个 drawable 是黑色的吗 R.drawable.bg_customer - Geek
1个回答

0
使用dispatchDraw(Canvas canvas)方法进行绘制。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接