android - 如何在触控画布上显示线条?
问题描述
我有以下代码:
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();
解决方案
推荐阅读
- javascript - × TypeError: Cannot read property 'original' of undefined React
- java - 如何确保spring boot中方法执行的原子性?
- python - 如何使用 Python 覆盖文件中 2 列列表中的字符串选择行?
- python - 在 Python 中将多个不同长度的列表写入相同的行,每个列表写入一个单元格
- python - 如何根据列值注释python散点图上的某些数据点
- javascript - 如何使用映射和过滤器修改原始数组
- android - 在 React Native 中捕获图像之前,我们如何获取 exif 元数据信息
- arrays - 如何忽略此问题中的区分大小写?
- mysql - AWS 在通过 mysql 连接后无法看到 RDS mysql DB
- json - 如何将获取请求直接发送到 API?