Android学习5——涂鸦
- Android学习5——涂鸦 推荐度:
- 相关推荐
Android学习5——涂鸦
涂鸦
- 记录
- 源码
- 运行结果
记录
- 两次点击的间隔时间过短会发生“连笔”
- 程序闪退的原因:往往是代码错了!
boolean isClear = false;
运行时一直闪退就是因为这个设置成了true,使得画板初始化时错误调用了值为null的new2_Bitmap,让程序初始化失败。
源码
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=""android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><com.example.ex4_5.HandWriteandroid:id="@+id/handWriteView"android:layout_width="fill_parent"android:layout_height="380dp" /><LinearLayoutandroid:orientation="horizontal"android:gravity="center_horizontal"android:layout_width="fill_parent"android:layout_height="fill_parent"><Buttonandroid:id="@+id/clear"android:text="清屏"android:layout_width="200dp"android:layout_height="wrap_content" /></LinearLayout>
</LinearLayout>
MainActivity.java
package com.example.ex4_5;import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;public class MainActivity extends Activity {private HandWrite handWrite = null;private Button button = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);handWrite = (HandWrite)findViewById(R.id.handWriteView);//关联View组件button = (Button)findViewById(R.id.clear);button.setOnClickListener(new mClick());}/*点击事件*/private class mClick implements View.OnClickListener{@Overridepublic void onClick(View v) {handWrite.clear();//清屏}}
}
HandWrite,java
package com.example.ex4_5;import android.content.Context;
import android.graphics.*;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;public class HandWrite extends View {/*定义类变量*/Paint paint = null; //画笔/*Bitmap */Bitmap originalBitmap = null; //存放原始图像Bitmap new1_Bitmap = null; //存放从原始图像复制的位图图像Bitmap new2_Bitmap = null; //存放处理后的图像float startX = 0,startY = 0; //画线的起点坐标float clickX = 0,clickY = 0; //画线的终点坐标boolean isMove = true; //设置是否画线的标记boolean isClear = false; //设置是否清除涂鸦的标记 /*之前一开始一直闪退就是因为这个设置成了true*/int color = Color.GREEN; //设置画笔的颜色(绿色)float strokeWidth = 2.0f; //设置画笔的宽度/*带参数的构造函数*/public HandWrite(Context context, AttributeSet attrs){super(context,attrs);/*从资源中获取原始图像*/originalBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.cy).copy(Bitmap.Config.ARGB_8888,true);System.out.print(originalBitmap.toString());/*建立原始图像的位图*/new1_Bitmap = Bitmap.createBitmap(originalBitmap);}/*清除涂鸦*/public void clear(){isClear = true;new2_Bitmap = Bitmap.createBitmap(originalBitmap);invalidate();}/*设置画笔的宽度*/public void setstyle(float strokeWidth){this.strokeWidth = strokeWidth;}/*显示绘图*/@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);canvas.drawBitmap(HandWriting(new1_Bitmap),0,0,null);}/*记录绘制图形*/public Bitmap HandWriting(Bitmap o_Bitmap){/*定义画布*/Canvas canvas = null;/*创建绘制新图形的画布*/if (isClear){canvas = new Canvas(new2_Bitmap); /*这句出了问题*/}else {canvas = new Canvas(o_Bitmap);/*创建绘制原图形的画布*/}/*定义画笔*/paint = new Paint();paint.setStyle(Paint.Style.STROKE);paint.setAntiAlias(true);paint.setColor(color);paint.setStrokeWidth(strokeWidth);if (isMove){canvas.drawLine(startX,startY,clickX,clickY,paint); //在画布上画线条}startX = clickX;startY = clickY;if (isClear){return new2_Bitmap;}elsereturn o_Bitmap;}/*定义触摸屏事件*/@Overridepublic boolean onTouchEvent(MotionEvent event) {/*获取触摸坐标位置*/clickX = event.getX();clickY = event.getY();if (event.getAction() == MotionEvent.ACTION_DOWN){/*按下屏幕时无绘图*/isMove = false;invalidate();return true;}else if (event.getAction() == MotionEvent.ACTION_MOVE){/*记录在屏幕上滑动的轨迹*/isMove = true;invalidate();return true;}return super.onTouchEvent(event);}
}
运行结果
最新文章
- 性能测试报告(方案)模板
- NullPointerException丢失异常堆栈信息
- FlowFormer: Transformer结构光流估计
- 易用性测试详解
- IIS网站——SSL安全加密机制
- 腾讯笔试算法题
- 主成分分析(PCA)(principal component analysis)
- mmap函数使用
- Android 6.0 Marshmallow介绍
- 图解Linux中EXT4与EXT3的区别
- Linux下网络流量实时监控
- 机器学习几种距离比较:欧拉距离(Euclidean Distance)、曼哈顿距离(Manhattan Distance)和明可夫斯基距离(Minkowski Distance)
- 四川省13家企业荣获第十三届创新中国企业家论坛“创新型企业”奖
- c函数itoa和atoi实现
- c语言return 0和return 1的区别
- 基于离散小波变换 (DWT)的图像信息隐藏算法
- MBR与磁盘管理
- 【Spring Boot JPA】ManyToOne OneToMany学习笔记
- idea 出现中文乱码
- jdbcDAO