如图:

package com.example.myview;

import android.content.Context;

import android.graphics.Canvas;

import android.graphics.Color;

import android.graphics.Paint;

import android.graphics.Path;

import android.graphics.Paint.Style;

import android.util.AttributeSet;

import android.view.MotionEvent;

import android.view.View;

import android.view.View.OnTouchListener;

import android.view.SurfaceHolder;

import android.view.SurfaceHolder.Callback;

import android.view.SurfaceView;

/**

*

* @author HTP

*

*/

public class MyView extends SurfaceView implements Callback, OnTouchListener {

private Paint p = new Paint();

private Path path = new Path();

public MyView(Context context) {

// TODO Auto-generated constructor stub

super(context);

getHolder().addCallback(this);

p.setColor(Color.RED);

p.setTextSize(20);

p.setStyle(Style.STROKE);

// 设置监听

setOnTouchListener(this);

}

public MyView(Context context, AttributeSet attrs) {

super(context, attrs);

// TODO Auto-generated constructor stub

getHolder().addCallback(this);

p.setColor(Color.RED);

//消除锯齿

p.setAntiAlias(true);

p.setTextSize(20);

p.setStyle(Style.STROKE);

setOnTouchListener(this);

}

/**

* 自定义画的方法canvas.drawPath

*/

public void draw() {

// TODO Auto-generated method stub

Canvas canvas = getHolder().lockCanvas();

canvas.drawColor(Color.WHITE);

canvas.drawPath(path, p);

getHolder().unlockCanvasAndPost(canvas);

}

@Override

public void surfaceChanged(SurfaceHolder holder, int format, int width,

int height) {

// TODO Auto-generated method stub

draw();

}

@Override

public void surfaceCreated(SurfaceHolder holder) {

// TODO Auto-generated method stub

draw();

}

@Override

public void surfaceDestroyed(SurfaceHolder holder) {

// TODO Auto-generated method stub

// draw();

}

/**

* 触摸事件

*/

@Override

public boolean onTouch(View v, MotionEvent event) {

// TODO Auto-generated method stub

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

path.moveTo(event.getX(), event.getY());

draw();

break;

case MotionEvent.ACTION_MOVE:

path.lineTo(event.getX(), event.getY());

draw();

break;

default:

break;

}

return true;

}

/**

* 清理画布

*/

public void clear() {

path.reset();

draw();

}

}

android自定义画板,android 自定义控件 -- 画板相关推荐

  1. Android自定义view-电子签名画板

    电子签名作为用户的电子凭证,在很多业务中都有用到! 一.自定义电子签名画板 package com.kxf.androidtestdemo.view;import android.content.Co ...

  2. android 自定义时钟,Android自定义控件之圆形时钟(续)

    在上篇文章中,我向大家介绍了如何通过自定义View一步步画出一个漂亮的圆形时钟.如果你还没看的话,我不建议你接着往下看,因为这篇文章是接着上篇的文章,如果直接看的话可能会不知所云,所以还是建议你先看一 ...

  3. android 自定义 seekbar,Android自定义控件 带文字提示的SeekBar

    封面 1.写在前面 SeekBar控件在开发中还是比较常见的,比如音视频进度.音量调节等,但是原生控件有时还不能满足我们的需求,今天就来学习一下如何自定义SeekBar控件,本文主要实现了一个带文字指 ...

  4. android 自定义flowlayout,Android 自定义ViewGroup之实现FlowLayout-标签流容器

    本篇文章讲的是Android 自定义ViewGroup之实现标签流式布局-FlowLayout,开发中我们会经常需要实现类似于热门标签等自动换行的流式布局的功能,网上也有很多这样的FlowLayout ...

  5. android 自定义event,Android运用onTouchEvent自定义滑动布局

    写在自定义之前 我们也许会遇到,自定义控件的触屏事件处理,先来了解一下View类中的,onTouch事件和onTouchEvent事件. 1.boolean onTouch(View v, Motio ...

  6. android自定义省略号,Android开发自定义TextView省略号样式的方法

    本文实例讲述了Android开发自定义TextView省略号样式的方法.分享给大家供大家参考,具体如下: 在布局xml中设置textView的字段 android:maxLines="2&q ...

  7. android 自定义switchpreference,Android设置选项开发及自定义Preference样式

    一个完整的Android应用程序都应该提供选项(或者叫偏好设置等等)让用户对APP的表现形式能够进行设置,比如说是否加入用户体验计划,或者是否自动升级.定时提醒.开启自启动.后台运行等等.提供一个好的 ...

  8. android 自定义loading,Android自定义动画-StarLoadingView

    今天来分享第二个自定义loading的动画,起了个名字叫 蹦跶的星星 ,还是老规矩先介绍,后上图. 实现效果在最后,GIF有点大,手机流量慎重. 介绍 首先声明做这个动画的初衷是为了学习和分享,所以从 ...

  9. android 自定义命名空间,Android自定义ActionBar实例

    本文实例讲述了android自定义actionbar的实现方法.分享给大家供大家参考.具体实现方法如下: android 3.0及以上已经有了actionbar的api,可以通过引入support p ...

  10. android 自定义图形,Android自定义View之图形图像(模仿360的刷新球自定

    概述: 360安全卫士的那个刷新球(姑且叫它刷新球,因为真的不知道叫什么好,不是dota里的刷新球!!),里面像住了水一样,生动可爱,看似简单,写起来不太简单,本例程只是实现了它的部分功能而已,说实话 ...

最新文章

  1. Python NumPy的使用
  2. linux c编程头文件,如何在Linux中找到C编程语言的头文件?
  3. SAP OData:MPC class get last modified - how to implement
  4. .NET Core容器化之多容器应用部署@Docker-Compose
  5. 硬件密码组件的硬件结构、作用及实现应用设计
  6. kohana的modules集合
  7. CentOS部署Harbor镜像仓库,java分布式技术栈
  8. DIY(也即Build Your Own) vSAN时,选择SSD需要注意的事项
  9. Qt使用MSVC编译器关闭“C4100:未引用的形参”警告的方法
  10. Glib2之spec编译打包rpm(九)
  11. 第六次作业-----抽奖系统
  12. tinyxml2遍历所有节点_数据结构+算法(第15篇):“神之一着”与“翻云手”!后序遍历还能这么玩...
  13. 教你,用java生成验证码(这这太简单了了吧!!!!!!!)
  14. python画旋转六边形
  15. 牛客网力扣算法编程之二十一 | 数组 - 明明的随机数 - Java代码实现
  16. QLU ACM2018新生赛
  17. 【步态识别】LagrangeGait基于拉格朗日《Lagrange Motion Analysis and View Embeddings for Improved Gait Recognition》
  18. 《世界上谁最聪明?谁最愚蠢? ——最有道德者最聪明,最无道德者最愚蠢》作者:黎鸣...
  19. 你真的认为自己熟练Python?带你一篇文章 查漏补缺,感受自己离深入掌握 Python 还有多远。
  20. 3dMax 光标丢失,无法正常显示

热门文章

  1. Mysql中遇到的错误
  2. python自动化第三周---文件读写
  3. Mysql 如何设置字段自动获取当前时间,附带添加字段和修改字段的例子
  4. python学习笔记(二十八)日志模块
  5. lua去掉字符串中的UTF-8的BOM三个字节
  6. Linux下访问window挂载的磁盘
  7. 上海交通大学2006年数学分析考研试题
  8. spoj SUBLEX (Lexicographical Substring Search) RE的欢迎来看看
  9. Sublime Text 2 入门及技巧
  10. [C++] 转义序列