Android 画布画线,在android中的imageview画布上绘制透明线

问题是,我尝试将不透明度更改为100,这应该是透明的,但是当我尝试绘制线条时,它在线条上有一些圆圈. (参见截图)非常感谢如果提供一些示例代码.非常感谢您的帮助.

MainActivity的代码

// set image

bitmap = downScale(view.getTag().toString(),1280,1024);

altered_bitmap = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(), bitmap.getConfig());

draw_view.setNewImage(altered_bitmap,bitmap);

pen.setOnClickListener(new OnClickListener(){

@Override

public void onClick(View arg0) {

draw_view.setAlpha(100);

}

}

});

和自定义imageView的代码

public ScaleImageView(Context context) {

super(context);

sharedConstructing(context);

}

public void sharedConstructing(Context context) {

super.setClickable(true);

this.context = context;

mScaleDetector = new ScaleGestureDetector(context, new ScaleListener());

matrix = new Matrix();

m = new float[9];

setImageMatrix(matrix);

setScaleType(ScaleType.MATRIX);

paint = new Paint();

paint.setAntiAlias(true);

paint.setStrokeWidth(width);

paint.setColor(color);

paint.setStyle(Paint.Style.STROKE);

paint.setStrokeJoin(Paint.Join.ROUND);

paint.setStrokeCap(Paint.Cap.ROUND);

paint.setAlpha(alpha);

drawListener = new OnTouchListener() {

@Override

public boolean onTouch(View v, MotionEvent event) {

if (getDrawable() != null) {

int action = event.getAction();

switch (action) {

case MotionEvent.ACTION_DOWN:

downx = getPointerCoords(event)[0];// event.getX();

downy = getPointerCoords(event)[1];// event.getY();

break;

case MotionEvent.ACTION_MOVE:

upx = getPointerCoords(event)[0];// event.getX();

upy = getPointerCoords(event)[1];// event.getY();

canvas.drawLine(downx, downy, upx, upy, paint);

mPath = new Path();

paths.add(mPath);

invalidate();

downx = upx;

downy = upy;

break;

case MotionEvent.ACTION_UP:

upx = getPointerCoords(event)[0];// event.getX();

upy = getPointerCoords(event)[1];// event.getY();

canvas.drawLine(downx, downy, upx, upy, paint);

mPath = new Path();

paths.add(mPath);

invalidate();

break;

case MotionEvent.ACTION_CANCEL:

break;

default:

break;

}

}

return true;

}

};

setOnTouchListener(drawListener);

}

//draw view start

public void setNewImage(Bitmap alteredBitmap, Bitmap bmp) {

canvas = new Canvas(alteredBitmap);

matrix_draw = new Matrix();

canvas.drawBitmap(bmp, matrix_draw, paint);

setImageBitmap(alteredBitmap);

mPath = new Path();

paths.add(mPath);

}

public void setBrushColor(int color) {

this.color = color;

paint.setColor(color);

paint.setAlpha(alpha);

}

public void setAlpha(int alpha) {

this.alpha = alpha;

paint.setAlpha(alpha);

}

public void setWidth(float width) {

this.width = width;

paint.setStrokeWidth(width);

}

final float[] getPointerCoords(MotionEvent e) {

final int index = e.getActionIndex();

final float[] coords = new float[] { e.getX(index), e.getY(index) };

Matrix matrix = new Matrix();

getImageMatrix().invert(matrix);

matrix.postTranslate(getScrollX(), getScrollY());

matrix.mapPoints(coords);

return coords;

}

public void setIsScale() {

isScale = !isScale;

setOnTouchListener(isScale ? zoomListener : drawListener);

}

和截图

更新:项目代码

由于通过代码提取很难找出问题所以我已经将项目(< 1 mb)和已使用的库一起上传: 如果你有空闲时间,欢迎你来看看

它是一个小型绘图工具,首先将带有一些图像的文件夹复制到设备中的“HistoryTool”文件夹中

例如,路径如:

sd card root/ HistoryTool/ folder1 / a.jpg

,然后你可以画它,但绘制透明线上有圆圈.就这样

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值