Android studio实现画板功能

Android studio实现画板功能,第1张

概述简单概述在日常生活中,我们经常会突发一些奇思妙想,或是一个画面,或是几个符号。这时候无法使用拍照或者打字功能实现,想拿笔记下又身边找不到笔。于是我琢磨能不能做一个手机端的画板。效果图实现过程项目布局很简单让我们来看代码:首先声明画笔,画板,和坐标publicclassMa 简单概述

在日常生活中,我们经常会突发一些奇思妙想,或是一个画面,或是几个符号。这时候无法使用拍照或者打字功能实现,想拿笔记下又身边找不到笔。于是我琢磨能不能做一个手机端的画板。

效果图

实现过程

项目布局很简单


让我们来看代码:首先声明画笔,画板,和坐标

public class MainActivity extends AppCompatActivity{    Paint paint;    Canvas canvas;    ImageVIEw imagevIEw;    Bitmap bitmap,newbitmap;    TextVIEw tv_stroke;    int startX, startY, endX, endY;    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_my_paint_tools);        linearLayout ll_layout = findVIEwByID(R.ID.ll_layout);        RadioGroup rg_color = findVIEwByID(R.ID.rg_color);

遍历单选按钮,当单选按钮选中时,获取单选按钮颜色并将画笔颜色设置当前按钮的文本颜色,最后注意要设置画笔宽度,以免在后面点橡皮擦的时候画笔宽度调不回来

        for (int i = 0;i<rg_color.getChildCount();i++){            Radiobutton rb = (Radiobutton) rg_color.getChildAt(i);            rb.setonCheckedchangelistener(new Compoundbutton.OnCheckedchangelistener() {                  @OverrIDe                public voID onCheckedChanged(Compoundbutton buttonVIEw, boolean isChecked) {                    if (buttonVIEw.isChecked()){                        paint.setcolor(buttonVIEw.getTextcolors().getDefaultcolor());                          paint.setstrokeWIDth(5);                    }                }            });        }

首先创建一张空白图片和一张灰色画布,将图片放在画布上面

       imagevIEw = findVIEwByID(R.ID.imagevIEw);        Log.i("MyPaintToolsActivity",imagevIEw.getWIDth()+" "+imagevIEw.getHeight());        Point point = new Point();        getwindowManager().getDefaultdisplay().getSize(point);        Log.i("MyPaintToolsActivity",point.x+" "+point.y);        bitmap = Bitmap.createBitmap(888,1200,Bitmap.Config.ARGB_8888);          canvas = new Canvas(bitmap);          canvas.drawcolor(color.argb(100,0,0,0));           paint = new Paint();        paint.setstrokeWIDth(5);        paint.setAntiAlias(true);        paint.setcolor(color.RED);        canvas.drawBitmap(bitmap,new Matrix(),paint);          imagevIEw.setimageBitmap(bitmap);         

注册触摸监听事件,获取鼠标按下时的坐标和鼠标移动后的坐标。在开始和结束之间画一条直线并更新画布图片

        imagevIEw.setontouchListener(new VIEw.OntouchListener() {            @OverrIDe            public boolean ontouch(VIEw v, MotionEvent event) {                switch(event.getAction()){                    case MotionEvent.ACTION_DOWN:                        Log.i("MyPaintToolsActivity","ACTION_DOWN");                                                startX = (int) (event.getX()/1.4);                        startY = (int) (event.getY()/1.4);                        break;                    case MotionEvent.ACTION_MOVE:                        Log.i("MyPaintToolsActivity","ACTION_MOVE");                                                endX = (int) (event.getX()/1.4);                        endY = (int) (event.getY()/1.4);                        canvas.drawline(startX,startY,endX,endY,paint);                        startX = (int) (event.getX()/1.4);                        startY = (int) (event.getY()/1.4);                        imagevIEw.setimageBitmap(bitmap);                        break;                    case MotionEvent.ACTION_UP:                        Log.i("MyPaintToolsActivity","ACTION_UP");                        break;                }                imagevIEw.invalIDate();                return true;            }        });

清屏的话就一行代码 ,剩下的是重新生成一块画布

        button btn_clear = findVIEwByID(R.ID.btn_clear);        btn_clear.setonClickListener(new VIEw.OnClickListener() {            @OverrIDe            public voID onClick(VIEw v) {                canvas.drawcolor(0,PorterDuff.Mode.CLEAR);                bitmap = Bitmap.createBitmap(888,1200,Bitmap.Config.ARGB_8888);                 canvas = new Canvas(bitmap);                    canvas.drawcolor(color.argb(100,0,0,0));                   paint = new Paint();                paint.setstrokeWIDth(5);                paint.setAntiAlias(true);                paint.setcolor(color.RED);                canvas.drawBitmap(bitmap,new Matrix(),paint);                 imagevIEw.setimageBitmap(bitmap);                     }        });

呃,这里会把画布擦掉…也就是擦成白色…

        // 擦除        button btn_eraser = findVIEwByID(R.ID.btn_eraser);        btn_eraser.setonClickListener(new VIEw.OnClickListener() {            @OverrIDe            public voID onClick(VIEw v) {                paint.setcolor(color.rgb(250,250,250));                paint.setstrokeWIDth(30);            }        });    }}

最后看看页面布局

<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"    xmlns:app="http://schemas.androID.com/apk/res-auto"    xmlns:tools="http://schemas.androID.com/tools"    androID:layout_wIDth="match_parent"    androID:layout_height="match_parent"    androID:orIEntation="vertical"    androID:ID="@+ID/ll_layout"><!--    tools:context=".MyPaintToolsActivity">-->    <ImageVIEw        androID:ID="@+ID/imagevIEw"        androID:layout_wIDth="match_parent"        androID:layout_height="match_parent"        androID:layout_weight="1" />    <RadioGroup        androID:background="#747373"        androID:layout_wIDth="match_parent"        androID:orIEntation="horizontal"        androID:ID="@+ID/rg_color"        androID:layout_height="wrap_content">        <Radiobutton            androID:ID="@+ID/rb_red"            androID:layout_wIDth="wrap_content"            androID:layout_height="43dp"            androID:layout_weight="1"            androID:text="红色"            androID:textcolor="#FF0000"            androID:textSize="18sp" />        <Radiobutton            androID:ID="@+ID/rb_green"            androID:layout_wIDth="wrap_content"            androID:layout_height="30dp"            androID:layout_weight="1"            androID:text="黑色"            androID:textcolor="#000000"            androID:textSize="18sp" />        <Radiobutton            androID:ID="@+ID/rb_blue"            androID:layout_wIDth="wrap_content"            androID:layout_height="30dp"            androID:layout_weight="1"            androID:text="白色"            androID:textcolor="#FFFFFF"            androID:textSize="18sp" />    </RadioGroup>    <linearLayout        androID:layout_wIDth="match_parent"        androID:layout_height="wrap_content"        androID:gravity="center"        androID:orIEntation="horizontal">        <button            androID:ID="@+ID/btn_clear"            androID:layout_wIDth="wrap_content"            androID:layout_weight="1"            androID:layout_height="wrap_content"            androID:background="#000000"            androID:textcolor="#FFFFFF"            androID:textSize="18sp"            androID:text="清除"/>        <button            androID:ID="@+ID/btn_eraser"            androID:layout_wIDth="wrap_content"            androID:layout_weight="1"            androID:layout_height="wrap_content"            androID:textcolor="#FFFFFF"            androID:textSize="18sp"            androID:background="#000000"            androID:text="擦除"/>    </linearLayout></linearLayout>
总结

以上是内存溢出为你收集整理的Android studio实现画板功能全部内容,希望文章能够帮你解决Android studio实现画板功能所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1054062.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存