Android小程序-涂鸦板

本文介绍了如何在Android平台上开发一款简易的涂鸦板应用。通过实现选择颜色、笔触大小及清屏功能,利用Canvas和Paint进行图形绘制,响应触屏事件获取用户手势轨迹。关键在于HandWrite类的View继承以及onDraw()方法的使用,通过调用invalidate或postInvalidate触发重绘。
摘要由CSDN通过智能技术生成

最近android课老师布置了一个课后作业,是实现android涂鸦板的功能,

然后自己写了一个简单的涂鸦板,可以实现选择颜色、尺寸、清屏的功能。

首先是效果图:


主要是使用Canvas和Paint来实现画图,并使用触屏事件处理来获取用户滑动的坐标。

首先,新建一个类HandWrite并继承View

实现画图的主要方法是onDraw()方法。

onDraw():绘图主函数,但是onDraw方法是个触发事件产生的调用,只能通过特定的方法触发事件以来调用onDraw。

触发onDraw函数的方法是:invalidate或者postInvalidate

直接上代码:

package com.example.icarus.ch6_2;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

import java.util.Stack;

/**
 * Created by icarus on 3/31/2016.
 * 自定义组件实现view
 * view上绘制Canvas对象,onDrow函数中实现
 */
public class HandWrite extends View{

    //定义画笔
    private Paint paint;
    //存放原始图像
    private Bitmap originalBitmap=null;
    //存放从原始图形复制的图像
    private Bitmap new1_Bitmap=null;
    //存放处理后的图像
    private Bitmap new2_Bitmap=null;
    //画线的起始坐标
    private float startX=0,startY=0;
    //第二次画线起始坐标
    private float secondX=0,secondY=0;
    //画线的终点坐标
    private float clickX=0,clickY=0;
    //清屏按钮是否按下
    private boolean isClear=false;
    //设置是否画线的标志
    private boolean isMove=true;
    //是否按下
    private boolean isDown=false;
    //记录绘画历史的栈
    private Stack<Bitmap> bitmap_stack=new Stack<Bitmap>();
    //控制是否出栈的标志
    private boolean isPOP=false;


    /**
     * 实现默认构造函数
     * @param context
     * @param attrs
     */
    public HandWrite(Context context, AttributeSet attrs) {
        super(context, attrs);
        //从资源中获取原始图形,android不允许在代码里修改res文件,下面的代码会出错
        //originalBitmap= BitmapFactory.decodeResource(getResources(),R.drawable.capture);
        //需使用这种格式代替
        originalBitmap=BitmapFactory.decodeResource(getResources(),R.drawable.capture).copy(Bitmap.Config.ARGB_8888,true);
        new1_Bitmap=Bitmap.createBitmap(originalBitmap);
        paint=new Paint();
    }

    /**
     * 清除涂鸦
     */
    public void clear(){
        isClear=true;
        new2_Bitmap=Bitmap.createBitmap(originalBitmap);
        invalidate();
    }


    /**
     * 撤销功能实现
     */
    public void doPOP(){
        isPOP=true;
        new2_Bitmap=bitmap_stack.pop();
        invalidate();
    }



    /**
     * 设置颜色
     * @param 
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值