不同风格的画在画布上

时间:2015-04-10 23:16:27

标签: java android canvas bitmap

我正在寻找如何改变笔的风格。我想得到类似像素数组的东西。不是中风。当用户触摸屏幕时,画布上会出现黑色方块。

我的代码:

public class DrawingView extends View {

private Bitmap cacheBitmap;

private Canvas cacheCanvas;

private Paint paint;

private Paint BitmapPaint;

private Path path;

private int height;

private int width;

/** Last saved X-coordinate */
private float pX;
/** Last saved Y-coordinate*/
private float pY;

private int counterxy=0;

/** Initial color */
private int paintColor = Color.BLACK;

private static Paint.Style paintStyle = Paint.Style.STROKE;
/** Paint Point size */
private static int paintWidth = 8;

private Canvas canvas;

private DrawingViewInterface mInterface;            

/** get the height and width */
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    height = h;
    width = w;
    init();
}

public void setViewListener(DrawingViewInterface interface1) {      
    mInterface = interface1;
}

private void init(){
    cacheBitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);
    cacheCanvas = new Canvas(cacheBitmap);
    paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    path = new Path();
    BitmapPaint = new Paint();
    updatePaint();
}

private void updatePaint(){
    paint.setColor(paintColor);
    paint.setStyle(paintStyle);
    paint.setStrokeWidth(paintWidth);
}

public DrawingView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public DrawingView(Context context){
    super(context);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    int action = event.getAction();


    switch (action) {
        case MotionEvent.ACTION_DOWN:
            path.moveTo(event.getX(), event.getY());
            pX = event.getX();
            pY = event.getY();
            break;
        case MotionEvent.ACTION_MOVE:
            path.quadTo(pX, pY, event.getX(), event.getY());
            pX = event.getX();
            pY = event.getY();

            counterxy++;

            mInterface.onActionFinished(pX, pY, counterxy);        // Wyslanie wspolrzednych do MainActivity
            break;
        case MotionEvent.ACTION_UP:
            cacheCanvas.drawPath(path, paint);
            path.reset();


            break;
    }

    invalidate();

    return true;
}

@Override
protected void onDraw(Canvas canvas) {
    this.canvas = canvas;
    BitmapPaint = new Paint();
    canvas.drawBitmap(cacheBitmap, 0,0, BitmapPaint);
    canvas.drawPath(path, paint);

}

}

1 个答案:

答案 0 :(得分:0)

如果你想要的只是一个矩形,Paint.setStrokeWidth就足够了。否则你可能需要setPathEffect(),虽然对于复杂的东西你可能需要创建自己的PathEffect。