1,使用虚拟机加载的图片是只读的,不能对其进行其他的操作。这在上一篇文章中已介绍,要想对其进行其他操作,还是同一个方法,就是创建其副本,对副本进行操作。

2,下面通过此知识点,再介绍一个通过ImageView实现画画板的功能。

3,先用作图工具画出一个画板的底色图(rt.png),作为原图:

4,以底色图为原图,创建其副本,在副本上实现画画板的功能:

a,实现类中的java代码:

public class MainActivity extends Activity{

private  ImageView  iView;
private  Paint  paint;
private  Canvas  canvas;
private  Bitmap  bmCopy;
private  int  startX;
private  int  startY;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
//加载资源id的图片
Bitmap bmSrc = BitmapFactory.decodeResource(getResources(), R.drawable.rt);
//创建副本
//1,创建一个和原图大小一样的白纸
bmCopy = Bitmap.createBitmap(bmSrc.getWidth(), bmSrc.getHeight(), bmSrc.getConfig());
//2,创建画笔
paint = new Paint();
//3,创建画板
canvas = new Canvas(bmCopy);
//4,开始绘画
canvas.drawBitmap(bmSrc, new Matrix(), paint);

iView = (ImageView) findViewById(R.id.iv);
//把拷贝的图片显示在视图上
iView.setImageBitmap(bmCopy);

//设置触摸监听
iView.setOnTouchListener(new  OnTouchListener() {
@Override
public boolean onTouch(View  v, MotionEvent  event) {
// 获取当前触摸事件的Action
int action = event.getAction();
switch (action) {
//手指按下
case MotionEvent.ACTION_DOWN:
//获取绘画开始的位置
startX = (int) event.getX();
startY = (int) event.getY();
break;
//手指滑动
case MotionEvent.ACTION_MOVE:
//获取手指滑动到新的位置
int newStartX = (int) event.getX();
int newStartY = (int) event.getY();
//开始绘画
canvas.drawLine(startX, startY, newStartX, newStartY, paint);
//手指滑动过程要不断初始化开始位置,不然开始位置不变
startX = newStartX;
startY = newStartY;
//重新设置iv显示副本
iView.setImageBitmap(bmCopy);
break;
//手指抬起
case MotionEvent.ACTION_UP:
System.out.println("手指离开了屏幕");
break;
}
//如果设置为true,那么这个触摸事件由该组件控制
return true;
}
});
}
//改变画笔的颜色及粗细
//绿色画笔
public void doGreen(View v){
paint.setColor(Color.GREEN);
}
//红色画笔
public void doRed(View v){
paint.setColor(Color.RED);
}

//黄色画笔
public void doYellow(View v){
paint.setColor(Color.YELLOW);
}
//改变粗细
public void doBrush(View v){
paint.setStrokeWidth(10);
}
}

b,layout布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.painter.MainActivity$PlaceholderFragment" >

<ImageView
        android:id="@+id/iv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/rt" />

<LinearLayout 
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_below="@id/iv"
        android:layout_marginTop="20dp"
        android:orientation="horizontal">
        
        <Button 
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:onClick="doGreen"
            android:text="绿色"
            android:textSize="20sp"
            android:textColor="#00ffff"/>
        <Button 
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:onClick="doRed"
            android:text="红色"
            android:textSize="20sp"
            android:textColor="#ff0000"/>

<Button 
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:onClick="doYellow"
            android:text="黄色"
            android:textSize="20sp"
            android:textColor="#ffff00"/>
        <Button 
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:onClick="doBrush"
            android:text="刷子"
            android:textSize="20sp" />
        
    </LinearLayout>
</RelativeLayout>

c,最终的实现效果:

ImageView实现画画板的功能相关推荐

  1. 安卓开发之画画板的实现

    该程序实现画画板的功能,可以调节画笔的大小以及颜色,png图片可以保存到本地或者相册中,同时带有清除画板以及橡皮檫等基本功能. DrawActivity的CODE: package com.examp ...

  2. 小程序canvas画画板签字版,touchmove时卡顿的问题(根本原因是因为vue语法中page.data导致视图层和逻辑层的频繁通讯导致)

    起因 因为要做一个画画板的功能,所以使用了canvas组件,一开始好多人说小程序canvas性能特别差,也没太注意,做出来之后确实有点卡,而且每一笔touchmove时间越长越卡,最终导致页面卡到无法 ...

  3. Android 实现图片画画板

    本文主要讲述了Android 实现图片画画板 设计项目布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk ...

  4. android实现简单的画画板

    画画板实现起来其实很简单,我们只需要利用android给我们提供的Canvas类来操作就可以实现简单的画画功能 直接看代码,注释都写清楚了 public class MainActivity exte ...

  5. 学习android 画板源代码,Android实现画画板案例

    郑州app开发画画板案例.布局代码是三个button和一个imagesview下面是图片. 布局代码就不展示了.下面是java代码. package cn.xhhkj.image; import an ...

  6. 电脑PHP动画制作画板,涂鸦板简单实现 Html5编写属于自己的画画板

    这篇文章主要教大家如何使用Html5编写属于自己的画画板,进行绘画.调整颜色等操作,感兴趣的小伙伴们可以参考一下 最近了解到html5强大的绘图功能让我惊奇,于是,写了个小玩意---涂鸦板,能实现功能 ...

  7. Android opengles 实现触碰屏幕,根据运动轨迹画直线的功能

    Android opengles 实现触碰屏幕,根据运动轨迹画直线的功能 目录 引言 第一步,先自己学会绘制一条固定坐标的直线 第二步,动态的绘制一条直线 第三步,坐标转换 第四步,绘制多条直线 代码 ...

  8. iOS 使用UIBezierPath类实现随手画画板

    在上一篇文章中我介绍了 UIBezierPath类 介绍 ,下面这篇文章介绍一下如何通过这个类实现一个简单的随手画画板的简单程序demo,功能包括:划线(可以调整线条粗细,颜色),撤销笔画,回撤笔画, ...

  9. Java编写的画图板,功能非常齐全,完整代码 附详细设计报告

    今天为大家分享一个java语言编写的图书管理程序-003,目前系统功能已经很全面,后续会进一步完善.整个系统界面漂亮,有完整得源码,希望大家可以喜欢.喜欢的帮忙点赞和关注.一起编程.一起进步 开发环境 ...

最新文章

  1. iOS开发之 - 好玩的富文本
  2. php iis mysql windows2003,Windows Server 2003 IIS6.0+PHP5(FastCGI)+MySQL5环境搭建教程 | 系统运维...
  3. Slab,小对象也能搞出大事情
  4. js前面代码出错继续运行_Node.JS实战41:让命令行变的五颜六色
  5. 在servlet中读取初始化参数和上下文参数的方法getServletContext()和getInitParameter()
  6. 如何验证 MySQL 的 InnoDB 在可重复读下依然会有幻影行问题及其原因
  7. VS2008如何添加 OLE/COM 对象查看器 .
  8. scale 和 transform-origin 实现线条从左侧进入,右侧离开效果
  9. 纯c语言实现动态分配多维数组的方法
  10. DIV背景半透明,DIV中的字不半透明
  11. 波士顿大学计算机与传媒专业,波士顿大学传媒专业好吗
  12. 笔记随笔1(webpack,vue-router,vuex)
  13. python UI/API 环境配置
  14. 冒泡、选择、插入、希尔、归并、快速排序、排序的稳定性、测试算法时间消耗
  15. 酷q服务器未响应,酷Q怎么了,停运后,其他机器框架,该怎么版
  16. php微信开发视频教程_PHP微信开发视频资源推荐
  17. vue axio的使用
  18. ASP.NET动态网站开发培训-39.互动论坛制作(七、制作回复留言页面)
  19. Packet Tracer 5.0建构CCNA实验攻略——帧中继Frame Relay
  20. 连接git仓库失败解决办法

热门文章

  1. CPU时钟周期、主频、CPI、MIPS
  2. Oracle同一个值对应多个值逗号隔开(符号隔开)
  3. Latex并排摆放两张表格
  4. php 易宝支付,【图片】易宝支付PHP版测试、懂的进【php吧】_百度贴吧
  5. Error: #260-D: explicit type is missing (int assumed)的解决方法
  6. 科软-实习招聘-笔试面试感悟(2019.03.24~2019.05.12)
  7. 文件管理 —— 文件存储空间管理
  8. 读高利曼昆的经济学原理(二)
  9. 一种快速分词系统的设计与实现
  10. 阿里云服务器网络收发包PPS性能25万/80万/100万PPS详解