首页 > 解决方案 > 如何在触控画布上显示线条?

问题描述

我有以下代码:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.os.Environment;
import android.view.MotionEvent;
import android.view.View;

public class DrawView extends View {

    private final int paintColor = Color.BLACK;
    Paint paint = new Paint();
    private float lastX, lastY;
    private boolean drawing = false;

    private Bitmap bitmap;
    private Canvas canvas;

    public DrawView(Context context) {
        super(context);
        setFocusable(true);
        paint.setColor(paintColor);
        paint.setAntiAlias(true);
        paint.setStrokeWidth(5);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.RGB_565);
        canvas = new Canvas(bitmap);
        if (bitmap != null) {
            canvas.drawBitmap(bitmap, 0, 0, null);
        }
        paint.setARGB(255, 255, 255, 255);
        canvas.drawPaint(paint);
        invalidate();
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        canvas.drawLine(0, 350, 1000, 350, paint);
        canvas.drawLine(0, 700, 1000, 700, paint);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            drawPoint(event.getX(), event.getY(), event.getPressure());
            return true;
        }
        else if (event.getAction() == MotionEvent.ACTION_UP) {
            drawing = false;
            return true;
        }
        else if (event.getAction() == MotionEvent.ACTION_MOVE) {
            drawing = true;
            drawPoint(event.getX(), event.getY(), event.getPressure());
            return true;
        }
        return false;
    }

    private void drawPoint(float x, float y, float pressure) {
        if (bitmap != null) {
            paint.setColor(paintColor);
            if (drawing) {
                if((y < 700) && (y > 350)) {
                    canvas.drawLine(lastX, lastY, x, y, paint);
                }
            }
            else {
                if((y < 700) && (y > 350)) {
                    canvas.drawPoint(x, y, paint);
                }
            }

            lastX = x;
            lastY = y;

            invalidate();
        }
    }
}

我想显示两行(参见 onDraw),它们包含用户能够绘制内容的字段。但是这些行仅在用户点击屏幕上的任意位置后才会显示,而不是直接在显示 DrawView 时显示。

你知道这个问题的可能解决方案吗?

从我的活动中,我调用 DrawView

drawView = new DrawView(this);
setContentView(drawView);
drawView.requestFocus();

标签: androidcanvas

解决方案


推荐阅读