canvas-按下按钮后擦除器没有调用

问题描述

按下按钮后擦除器没有调用

main class:

public class Main extends Activity {

    Button edit,save,eraser,clear;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        edit = (Button) findViewById(R.id.edit);
        save = (Button) findViewById(R.id.save);
        clear = (Button) findViewById(R.id.clear);
        eraser = (Button) findViewById(R.id.eraser);

        eraser.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    GameBoard aa = new GameBoard(Main.this);
                    aa.eraser();
                    aa.invalidate();
                }
        });
    }
}

视图类:

public class GameBoard extends View{

    public void init() {
        mPaint = new Paint();
        mPaint.setAntiAlias(true);
        mPaint.setDither(true);
        // mPaint.setColor(Color.BLACK);
        mPaint.setColor(0xFFFF0000);

        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setStrokeJoin(Paint.Join.ROUND);
        mPaint.setStrokeCap(Paint.Cap.ROUND);
        mPaint.setStrokeWidth(12);
    }

    public Paint mPaint;

    public GameBoard(Context context) {
        super(context);
        init();
    }

    private Bitmap mBitmap;
    private Canvas mCanvas;
    private Path mPath;
    private Paint mBitmapPaint;

    public GameBoard(Context context, AttributeSet aSet) {
        super(context, aSet);
        init();
        mBitmap = Bitmap.createBitmap(800, 1024, Bitmap.Config.ARGB_8888);
        mCanvas = new Canvas(mBitmap);
        mPath = new Path();
        mBitmapPaint = new Paint(Paint.DITHER_FLAG);
    }

    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
    }

    @Override
    public void onDraw(Canvas canvas) {
        // initialize
        // canvas.drawColor(Color.WHITE);
        canvas.drawColor(0xFFAAAAAA);
        canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint);
        canvas.drawPath(mPath, mPaint);
    }

    private float mX, mY;
    private static final float TOUCH_TOLERANCE = 4;

    private void touch_start(float x, float y) {
        mPath.reset();
        mPath.moveTo(x, y);
        mX = x;
        mY = y;
    }

    private void touch_move(float x, float y) {
        float dx = Math.abs(x - mX);
        float dy = Math.abs(y - mY);
        if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
            mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
            mX = x;
            mY = y;
        }
    }

    private void touch_up() {
        mPath.lineTo(mX, mY);
        // commit the path to our offscreen
        mCanvas.drawPath(mPath, mPaint);
        // kill this so we don't double draw
        mPath.reset();
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        float x = event.getX();
        float y = event.getY();

        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            touch_start(x, y);
            invalidate();
            break;

        case MotionEvent.ACTION_MOVE:
            touch_move(x, y);
            invalidate();
            break;

        case MotionEvent.ACTION_UP:
            touch_up();
            invalidate();
            break;
        }
        return true;
    }

    public void eraser() {
        // TODO Auto-generated method stub
        Toast.makeText(getContext(), "eraser", Toast.LENGTH_LONG).show();
        mPaint.setXfermode(null);
        mPaint.setAlpha(0xFF);
        mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
        invalidate();
    }
}

布局文件:

<com.authorwjf.GameBoard
    android:id="@+id/the_canvas"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

但是在点击按钮的时候,没有将mPaint转换到eraser

解决方案

我看到你在onClick中创建的GameBoard没有联系到任何上面。

是不是这个view应该在activity的布局文件中?

时间: 2024-08-30 12:08:53

canvas-按下按钮后擦除器没有调用的相关文章

在按下按钮后,将view.aspx文件引入到index.aspx中的表格TABLE中来?

问题描述 在按下按钮后,将view.aspx文件引入到index.aspx中的表格TABLE中来?原来的index.aspx文件内容不发生改变.index.aspx.cs文件:protectedvoidButton1_Click(objectsender,EventArgse){} 解决方案 解决方案二:这样行不?<%@includefile="a.jsp"%>解决方案三:这样行不?<%@includefile="a.aspx"%>解决方案四

media-点击按钮后停止媒体播放器

问题描述 点击按钮后停止媒体播放器 我在程序中设置一个媒体播放器,有play和stop按钮,当我运行以下代码时,play按钮是没有问题的,但是当我点击stop按钮时,却得到一个强行关闭的消息.这是怎么回事呢?这是我所用使用的代码: package com.example.hellomedia;import java.io.IOException; import android.app.Activity; import android.media.MediaPlayer; import andro

c语言-如何用C语言创建一个按钮,按下这个按钮后,相当于从键盘录入相应的字符串

问题描述 如何用C语言创建一个按钮,按下这个按钮后,相当于从键盘录入相应的字符串 问题的来源是这样的,我用c编了一个计算器的程序,但是其输入只能在黑框里通过键盘输,我想把它做成一个能用鼠标点的按键式的,所以,我想的是设置几个键,通过鼠标点了之后,就相当于从键盘录入了相应的字符串,也就能通过我编的C程序计算出结果,并显示出来了.如果可行的话,求大神帮我编一个简单的示例程序(比如就一个键,按下后相当于从键盘录入某个字符后字符串),如果不可行的话,能不能给我一个可行的建议啊 解决方案 控制台程序吗?要

c#-C# acess数据库 输如账号后 点击确定按钮后下个界面的textbox显示对应账号的所有信息

问题描述 C# acess数据库 输如账号后 点击确定按钮后下个界面的textbox显示对应账号的所有信息 C# acess数据库 输如账号后 点击确定按钮后下个界面的textbox显示对应账号的所有信息 求代码 解决方案 先把所有我回答你的帖子都采纳了,把你的程序上传到网盘,我可以帮你. 几句话说不清楚. 解决方案二: 两个问题,操作access,窗体间传值,老生常谈的问题,你去论坛里或搜索里搜吧,一堆一堆的

html-Dw cs6 要求点击按钮后在左下脚显示对应的mysql内容

问题描述 Dw cs6 要求点击按钮后在左下脚显示对应的mysql内容 如上图:点击提交按钮后就在左下角那里显示我查询出来的内容,应该在哪里写代码,在用dm cs6做的,麻烦懂的人说下 数据库连接成功了其他三个能正常显示. 部分代码 <?php echo $row_Recordset1['06.07.2015']; ?> <?php echo $row_Recordset1['18:25:08']; ?> <td><?php echo $row_Recordset

怎么给XP系统下的IE游览器加上锁

  怎么给XP系统下的IE游览器加上锁?下面的方法可以在WindowsXP.Windows7中实现这种要求. 打开IE游览器,点击"工具"→"Internet选项". 在"Internet选项"中单击"内容"→"启用". 弹出"内容审查程序"勾选"监护人可以键入密码允许用户查看受限制的内容",然后再点击"创建密码". 输入密码后,为了防止忘记密码可

JavaScript点击按钮后弹出透明浮动层的方法

  这篇文章主要介绍了JavaScript点击按钮后弹出透明浮动层的方法,可实现点击按钮弹出居中的透明浮动层的效果,涉及javascript操作鼠标事件及页面样式的相关技巧,需要的朋友可以参考下: 这里实现点击后页面变灰色,并用JS弹出一个居中的浮动层提示窗口,这个窗口是透明的,可以设置透明度,网上已经有很多类似的JavaScript代码,你可以借鉴一下. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26

js实现点击按钮后给Div图层设置随机背景颜色的方法

  这篇文章主要介绍了js实现点击按钮后给Div图层设置随机背景颜色的方法,实例分析了javascript操作页面div元素属性及随机数的相关技巧,需要的朋友可以参考下 本文实例讲述了js实现点击按钮后给Div图层设置随机背景颜色的方法.分享给大家供大家参考.具体如下: 给myDiv设置随机背景颜色,用随机颜色代码赋值给DIV的背景颜色 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

Ubuntu下的PDF阅读器okular安装使用介绍

  Linux下最好用的pdf查看器, foxit reader,adobe reader?不是,应该是Okular 本文介绍 Ubuntu 下的PDF 阅读器 okular [ˈɔkjələ] 中文意思是"眼睛" 这个软件是一用就让你爱上他的那种. 1 安装 代码如下: sudo apt-get install okular 2 注释 按 F6 快捷方式打开注释功能,你会发现太神奇了 3 中文配置 如果安装完成后中文显示有问题的话,可按如下试试,如果没有问题可跳过. 在 termin