java - Android View 不响应绘图

标签 java android view bitmap android-canvas

我目前正在 android 中试验我的第一个自定义 View ,并尝试通过 onTouchEvent 在 Canvas 上绘制点,但多次尝试后都失败了。 View 确实检测到我的触摸并在触摸时成功打印出 System.out.println 消息,但它仍然没有在 Canvas 上绘制。

经过多次尝试,我得出的结论是:

package com.techdigy.testapp;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

public class DrawingBoard extends View {
    Canvas canvas;
    Bitmap bmp;
    BitmapDrawable temp;

    public DrawingBoard(Context context, AttributeSet attributeSet) {
        super(context,attributeSet);
        // TODO Auto-generated constructor stub     
    }
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
        canvas = new Canvas();
        }

    protected void onDraw(Canvas canvas) {
        //draw view
        }
    public boolean onTouchEvent(MotionEvent event) {
        //detect user touch
        float touchX = event.getX();
        float touchY = event.getY();
        Paint paint = new Paint();
        System.out.println("test");
        this.canvas.drawPoint(touchX, touchY, paint);
        temp = new BitmapDrawable(this.bmp);
        this.setBackground(this.temp);
        invalidate();
        return true;
        }
}

最佳答案

试试这个...

public class DrawingBoard extends View {
    private Bitmap bmp;
    private float touchX;
    private float touchY;
    private Paint paint;
    public DrawingBoard(Context context, AttributeSet attributeSet) {
        super(context, attributeSet);
        paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        paint.setColor(Color.GREEN);
        paint.setStyle(Paint.Style.STROKE);
    }

    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);
        setBackgroundDrawable(new BitmapDrawable(getResources(), bmp));
    }

    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        canvas.drawPoint(touchX, touchY, paint);
    }

    public boolean onTouchEvent(MotionEvent event) {
        // detect user touch
        touchX = event.getX();
        touchY = event.getY();
        System.out.println("test");
        invalidate();
        return true;
    }
}

关于java - Android View 不响应绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20322575/

相关文章:

java - 二次公式计算器java中的NaN错误

java - GWT - 如何从 UI 到 Java 实现

java - 如何在android的Recyclerview中添加点赞按钮

android - 替换 fragment 时清除 fragment 添加的工具栏菜单选项

ruby-on-rails - 如何管理 View 文件中的 if-then 爆炸?

java - 将属性存储到文本文件中时,文本文件中属性的写入顺序与代码执行顺序相反

java - 分而治之 : computing the time elapsed

android - 查看某个位置是否在 Google Maps v2 上用多边形绘制的形状内

android - 淡出当前 Activity 的 View

database - 查找缺少任意字段的 CouchDB 文档