[英]Emboss bitmap on touch in android
I am developing color splash app. 我正在开发颜色飞溅应用程序。 in which i use finger paint.
我用手指画颜料。
Now i want to emboss bitmap on touch event. 现在我想在触摸事件上浮雕位图。 i have one demo here in which when i apply emboss then it draw emboss path with red color but i want to emboss behind bitmap on touch.
我在这里有一个演示,其中当我应用浮雕时,它会用红色绘制浮雕路径,但我想在触摸时在位图后面进行浮雕。
private Path mPath;
private MaskFilter mEmboss;
public void init(){
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setDither(true);
mPaint.setColor(color.RED);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);
mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setStrokeWidth(20);
mEmboss = new EmbossMaskFilter(new float[] { 1, 1, 1 }, 0.4f, 6, 3.5f);
}
// on click event
switch (item.getItemId()) {
case EMBOSS_MENU_ID:
mPaint.setMaskFilter(mEmboss);
}
// View Class method
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawPath(mPath, mPaint);
canvas.drawPath(circlePath, circlePaint);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
float x = ev.getX();
float y = ev.getY();
invalidate();
return true;
}
I eventually find the solution: 我最终找到了解决方案:
Use BitmapShader with same bitmap 将BitmapShader与相同的位图一起使用
private Path mPath;
private MaskFilter mEmboss;
public void init(){
mPaint = new Paint();
mPaint.setAntiAlias(true);
mPaint.setDither(true);
mPaint.setColor(color.RED);
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setStrokeJoin(Paint.Join.ROUND);
mPaint.setStrokeCap(Paint.Cap.ROUND);
mPaint.setStrokeWidth(20);
BitmapShader fillBMPshader = new BitmapShader(bm_original, Shader.TileMode.MIRROR, Shader.TileMode.CLAMP);
mPaint.setShader(fillBMPshader);
mEmboss = new EmbossMaskFilter(new float[] { 1, 1, 1 }, 0.4f, 6, 3.5f);
}
// onclick event
switch (item.getItemId()) {
case EMBOSS_MENU_ID:
mPaint.setMaskFilter(mEmboss);
}
// View Class method
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawPath(mPath, mPaint);
canvas.drawPath(circlePath, circlePaint);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
float x = ev.getX();
float y = ev.getY();
invalidate();
return true;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.