【问题标题】:Emboss bitmap on touch in android在android中触摸浮雕位图
【发布时间】:2015-01-20 13:35:14
【问题描述】:

我正在开发颜色飞溅应用程序。我在其中使用手指颜料。

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

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

【问题讨论】:

    标签: android bimap emboss


    【解决方案1】:

    我最终找到了解决方案:

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

    【讨论】:

      猜你喜欢
      • 2015-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-03
      • 2011-10-07
      • 1970-01-01
      相关资源
      最近更新 更多