2015-01-09 63 views
0

我正在开发颜色飞溅的应用程序。我用手指画。在android中触摸浮雕位图

现在我想在触摸事件上浮雕位图。我在这里有一个演示,其中当我应用浮雕,然后绘制红色的浮雕路径,但我想在触摸位图后浮雕。

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; 
} 

回答

2

我最终找到了解决方案:

使用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; 
}