安卓手写板app

news/2025/1/1 14:05:14/

最近做的一个课程实验,开发一个可以手写的应用程序,可供用户选择笔迹颜色以及笔迹大小。具体效果如下:


1)在XML文件中定义RadioGroup、RadioButton,SeekBar以及自定义View——WritingView。具体布局就不介绍了,后面直接给出代码。

2)在自定义View中实现手写功能:首先由于View中的onDraw方法每次绘制时都会把非当前轨迹清除,所以需要另外定义一个画布进行保存。这里定义Canvas和Bitmap。具体实现如下:

private Canvas mCanvas;     //定义画布
private Bitmap mBitmap;
public WritingView(Context context, AttributeSet attrs) {super(context, attrs);mCanvas = new Canvas();
}@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);mBitmap = Bitmap.createBitmap(w,h, Bitmap.Config.ARGB_8888);mCanvas.setBitmap(mBitmap);
}
@Override
protected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.drawBitmap(mBitmap,0,0,null);
}
然后重写onTouchEvent方法,实现当手指在屏幕上移动时,会把手指移动轨迹画出来。
private float startX;       //手写起点
private float startY;
public boolean onTouchEvent(MotionEvent event) {switch (event.getAction()){case MotionEvent.ACTION_DOWN:startX = event.getX();//将手接触屏幕时的位置设为起点
            startY = event.getY();break;case MotionEvent.ACTION_MOVE:mCanvas.drawLine(startX,startY,event.getX(),event.getY(),paint);//画起点到移动点间的线
            postInvalidate();//视图刷新
            startX = event.getX();//重改起点,这样才能绘制出随着手移动的曲线来
            startY = event.getY();break;case MotionEvent.ACTION_UP:mCanvas.drawLine(startX,startY,event.getX(),event.getY(),paint);postInvalidate();break;default:break;}return true;
}
其中在移动过程中,画线结束后要改变起点位置,这样才能得到由一段段线段组成的曲线。
3)在自定义View中定义setColor和setPaintSize方法,用于在MainActivity中调用。
这样就完成了手写板的功能。下面给出MainActivity和WritingView的完整代码:
WritingView代码:
public class WritingView extends View {Paint paint = new Paint();  //定义画笔

    private Canvas mCanvas;     //定义画布
    private Bitmap mBitmap;private float startX;       //手写起点
    private float startY;public WritingView(Context context, AttributeSet attrs) {super(context, attrs);mCanvas = new Canvas();}@Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);mBitmap = Bitmap.createBitmap(w,h, Bitmap.Config.ARGB_8888);mCanvas.setBitmap(mBitmap);}@Override
    public boolean onTouchEvent(MotionEvent event) {switch (event.getAction()){case MotionEvent.ACTION_DOWN:startX = event.getX();//将手接触屏幕时的位置设为起点
                startY = event.getY();break;case MotionEvent.ACTION_MOVE:mCanvas.drawLine(startX,startY,event.getX(),event.getY(),paint);//画起点到移动点间的线
                postInvalidate();//视图刷新
                startX = event.getX();//重改起点,这样才能绘制出随着手移动的曲线来
                startY = event.getY();break;case MotionEvent.ACTION_UP:mCanvas.drawLine(startX,startY,event.getX(),event.getY(),paint);postInvalidate();break;default:break;}return true;}@Override
    protected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.drawBitmap(mBitmap,0,0,null);}//改变画笔颜色的方法
    public void setColor(int color){if (paint!=null){paint.setColor(color);}}//改变画笔大小的方法
    public void setPaintSize(float size){if (paint!=null){paint.setStrokeWidth(size);}}
}
MainActivity代码:
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.RadioGroup;
import android.widget.SeekBar;public class MainActivity extends AppCompatActivity {WritingView writingView;private RadioGroup radioGroup;private SeekBar seekBar;@Override
    protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);writingView = (WritingView) findViewById(R.id.writing);radioGroup = (RadioGroup) findViewById(R.id.color_group);seekBar = (SeekBar) findViewById(R.id.paint_size);writingView.setColor(getResources().getColor(R.color.colorBlue));//设置默认情况下字体颜色为蓝色
        writingView.setPaintSize(20);//设置默认情况下字体大小为20
        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {@Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {//根据选择不同的radioButton项,调用writingView中的setColor方法改变画笔颜色
                switch (checkedId){case R.id.black:writingView.setColor(getResources().getColor(R.color.colorBlack));break;case R.id.red:writingView.setColor(getResources().getColor(R.color.colorRed));break;case R.id.green:writingView.setColor(getResources().getColor(R.color.colorGreen));break;case R.id.blue:writingView.setColor(getResources().getColor(R.color.colorBlue));break;default:break;}}});final int seekBarMax = seekBar.getMax();//获取用于改变画笔大小的seekBar的最大值,目的是便于将seekBar值转换成百分数
        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {@Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {writingView.setPaintSize((float)progress*20/seekBarMax);//将seekBar的进度值转换成百分数并乘以倍数,实现改变画笔大小
            }@Override
            public void onStartTrackingTouch(SeekBar seekBar) {}@Override
            public void onStopTrackingTouch(SeekBar seekBar) {}});}
}



http://www.ppmy.cn/news/254627.html

相关文章

友基s400手写板怎么安装_手写板安装,手把手教你电脑手写板怎么安装

网络飞速发展的年代,越来越多的人加入到网络世界中,其中包括我们的父辈、爷辈。他们不会拼音不会五笔怎么去网上搜索资料呢?那么就需要有一款能提供手写的软件来帮助他们上网冲浪、浏览新闻等资讯。具体要怎么去做呢?下面,小编给大家讲解安装电脑手写板的技巧。 随着科技的…

友基s400手写板怎么安装_电脑手写板怎么安装 轻松学会安装手写板【图文】

很多人买了手写板拿到手,却苦恼于自己是电脑小白而不会安装手写板或者是电脑手写板安装不成功。电脑手写板怎么安装?下面我们一起来学习下怎么安装电脑手写板。 电脑手写板怎么安装 1、把手写板的驱动盘放进光驱,一般手写板的驱动盘比较小,放进光驱的时候要使劲卡住光盘才行…

友基s400手写板怎么安装_电脑手写板安装步骤 手写板怎么用

电脑手写板就像手机的触笔,无论是书写还是娱乐,只要轻轻一点就可以了,用起来十分方便,所以你知道为什么电脑手写板卖得这么火了吧!那么,到底手写板怎么用呢?下面随小编一起看看手写板怎么用吧。 一、正确安装手写板 手写板在第一次使用的时候要先安装好,以下是安装详细…

友基s400手写板怎么安装_手写板安装,教您电脑手写板怎么安装

网络飞速发展的年代,越来越多的人加入到网络世界中,其中包括我们的父辈、爷辈。他们不会拼音不会五笔怎么去网上搜索资料呢?那么就需要有一款能提供手写的软件来帮助他们上网冲浪、浏览新闻等资讯。具体要怎么去做呢?下面&#xf…

Nexus 4 解锁

Nexus 4 解锁 1. 下载并安装Android SDK http://developer.android.com/sdk/index.html 下载ADT Bundle与SDK Tools Only都可以,把SDK Manager中Android SDK Tools、Android SDK Platform-tools、Google USB Driver的包选择并安装。 (推荐将[Android SDK安装路径]\a…

nexus磁盘不足

1.清理物理 先创建一个Admin - Cleanup repositories using their associated policies类型的Task,这个任务会并不会真正但删除镜像,只是将其设置成deleted状态,不会物理删除;因此我们还需再创建一个Admin - Compact blob store类型的Task完…

linux 卸载nexus,Linux下安装maven和nexus

Linux下安装maven 1.首先到Maven官网下载安装文件,目前最新版本为3.0.3,下载文件为apache-maven-3.0.3-bin.tar.gz,下载可以使用wget命令; 2.进入下载文件夹,找到下载的文件,运行如下命令解压 tar -xvf apache-maven-2.2.1-bin.tar.gz 解压后的文件夹名为apache-maven-3.…

Nexus的优化

优化私服的下载地址 创建Group 设置远程代理 这一篇是接上一篇文章的,这里的操作是对上一篇搭建的Nexus服务器的优化。上一篇文章的地址如下: 用Docker搭建Nexus私服 优化私服的下载地址 在我们下载上传到私服中的jar包时,我们肯定不想在项…