本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处!

常用控件说了不少,现在说说手机开发中也常用到的画图。要掌握Android的画图,首先就要了解一下,基本用到的图形接口:

1.Bitmap,可以来自资源/文件,也可以在程序中创建,实际上的功能相当于图片的存储空间;

2.Canvas,紧密与Bitmap联系,把Bitmap比喻内容的话,那么Canvas就是提供了众多方法操作Bitamp的平台;

3.Paint,与Canvas紧密联系,是"画板"上的笔刷工具,也用于设置View控件上的样式;

4.Drawable,如果说前三者是看不见地在内存中画图,那么Drawable就是把前三者绘图结果表现出来的接口。Drawable多个子类,例如:位图(BitmapDrawable)、图形(ShapeDrawable)、图层(LayerDrawable)等。

本文主要讲解如何在ImageView画图,以及如何直接在Button(继承View的控件)上面绘制自定义图像。

直接把资源图片画出来

在ImageView上画图以及绘字

直接在控件背景上画图

main.xml的源码:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <Button android:id="@+id/Button01" android:layout_width="fill_parent" android:layout_height="44px" android:text="显示资源图片"></Button> <Button android:id="@+id/Button02" android:layout_width="fill_parent" android:layout_height="44px" android:text="显示并绘画资源图片"></Button> <Button android:id="@+id/Button03" android:layout_height="44px" android:layout_width="fill_parent" android:text="在控件上绘图"></Button> <ImageView android:id="@+id/ImageView01" android:layout_width="wrap_content" android:layout_height="wrap_content"></ImageView> </LinearLayout>

程序的源码:

package com.testDraw; import android.app.Activity; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Typeface; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.ImageView; public class testDraw extends Activity { ImageView iv; Button btn1,btn2,btn3,btn4; Resources r; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); iv=(ImageView)this.findViewById(R.id.ImageView01); btn1=(Button)this.findViewById(R.id.Button01); btn2=(Button)this.findViewById(R.id.Button02); btn3=(Button)this.findViewById(R.id.Button03); btn1.setOnClickListener(new ClickEvent()); btn2.setOnClickListener(new ClickEvent()); btn3.setOnClickListener(new ClickEvent()); r = this.getResources(); } class ClickEvent implements View.OnClickListener { public void onClick(View v) { if(v==btn1)//显示资源图片 {//功能等效 //iv.setBackgroundResource(R.drawable.icon);//打开资源图片 Bitmap bmp=BitmapFactory.decodeResource(r, R.drawable.icon);//打开资源图片 iv.setImageBitmap(bmp); } else if(v==btn2)//显示并绘画资源图片 { Bitmap bmp=BitmapFactory.decodeResource(r, R.drawable.icon);//只读,不能直接在bmp上画 Bitmap newb = Bitmap.createBitmap( 300, 300, Config.ARGB_8888 ); Canvas canvasTemp = new Canvas( newb ); canvasTemp.drawColor(Color.TRANSPARENT); Paint p = new Paint(); String familyName ="宋体"; Typeface font = Typeface.create(familyName,Typeface.BOLD); p.setColor(Color.RED); p.setTypeface(font); p.setTextSize(22); canvasTemp.drawText("写字。。。",50,50,p); canvasTemp.drawBitmap(bmp, 50, 50, p);//画图 iv.setImageBitmap(newb); } else if(v==btn3)//直接在Button上绘图 { Bitmap newb = Bitmap.createBitmap( btn3.getWidth(), btn3.getHeight(), Config.ARGB_8888 ); Canvas canvasTemp = new Canvas( newb ); canvasTemp.drawColor(Color.WHITE); Paint p = new Paint(); String familyName = "宋体"; Typeface font = Typeface.create(familyName, Typeface.BOLD); p.setColor(Color.RED); p.setTypeface(font); p.setTextSize(20); canvasTemp.drawText("写字。。。", 30, 30, p); Drawable drawable = new BitmapDrawable(newb); btn3.setBackgroundDrawable(drawable); } } } }

Android入门第十四篇之画图相关推荐

  1. Android入门第十五篇之ActivityGroup + GridView 实现Tab分页标签

    很多客户端软件和浏览器软件都喜欢用Tab分页标签来搭建界面框架.读者也许会马上想到使用TabHost 与 TabActivity的组合,其实最常用的不是它们,而是由GridView与ActivityG ...

  2. Avalonia跨平台入门第十四篇之ListBox折叠列表

    在前面分享的几篇中咱已经玩耍了Popup.ListBox多选.Grid动态分.RadioButton模板.控件的拖放效果.控件的置顶和置底.控件的锁定.自定义Window样式.动画效果.Expande ...

  3. Android入门第十六篇之Style与Theme

    本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处! 越来越多互联网企业都在Android平台上部署其客户端,为了提升用户体验,这些客户端都做得布局合理而且美观.. ...

  4. 2021-11-23----韩顺平Java入门第十四天

    韩顺平Java入门第十四天(排序.查找) 1.排序     1).排序的介绍:排序是将多个数据,依指定的顺序进行排列的过程.     2).内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序 ...

  5. QT入门第十四天 串口通信协议+收发数据+波特率+数据位+停止位+奇偶校验+串口识别射频RFID的卡号

    QT入门第十四天 串口通信[QT入门第十四天 串口通信协议+收发数据+波特率+数据位+停止位+奇偶校验+串口识别射频RFID的卡号 第一章 常见的硬件通信接口协议 [1]硬件通信接口协议 [2]使用串 ...

  6. window.addeventlistener 不能调用方法_Java入门第十四课:如何定义”方法“

    第十四课,学习定义方法.一个对象包含三种最常见的成员:构造器.Field和方法.Field用于定义状态数据,而方法是行为特征的抽象. 那么什么是方法呢? 在Java中,方法就是用来完成解决某件事情或实 ...

  7. Avalonia跨平台入门第十九篇之语音播放

    在前面分享的几篇中咱已经玩耍了Popup.ListBox多选.Grid动态分.RadioButton模板.控件的拖放效果.控件的置顶和置底.控件的锁定.自定义Window样式.动画效果.Expande ...

  8. Avalonia跨平台入门第十五篇之ListBox聊天窗口

    在前面分享的几篇中咱已经玩耍了Popup.ListBox多选.Grid动态分.RadioButton模板.控件的拖放效果.控件的置顶和置底.控件的锁定.自定义Window样式.动画效果.Expande ...

  9. Avalonia跨平台入门第十二篇之动画效果

    在前面分享的几篇中咱已经玩耍了Popup.ListBox多选.Grid动态分.RadioButton模板.控件的拖放效果.控件的置顶和置底.控件的锁定.自定义Window样式;今天趁着空闲时间接着去摸 ...

最新文章

  1. java 对象多属性排序_java list按照元素对象的指定多个字段属性进行排序
  2. APP-V与RemotoAPP
  3. mysql中sql命令大小写吗_sql语句大小写有关系吗?
  4. 44. Wildcard Matching 通配符匹配
  5. Hadoop之InputFormat数据输入详解
  6. SAP S/4HANA Smart Business Filter is too complex - step by step
  7. OSG-基本几何图形
  8. 软件著作权算法软件设计说明书_软件详细设计说明书例子.pdf
  9. iOS视频直播初窥:高仿喵播APP
  10. Nginx + Lua搭建文件上传下载服务(转载腾讯云大神)
  11. CEIWEI CommMonitor 串口监控精灵v12.0 串口过滤;串口监控;Serial port monitor tools
  12. Macbook同时访问内外网
  13. python爬虫之数据提取、正则表达式、xml、XPath、etree、CSS选择器 BeautifulSoup4
  14. java算法合集-九阳神功第三式滑动窗口
  15. 腾讯云服务器性能评测:8核 16G 18M 配置
  16. sql删除数据的3种方法
  17. ubuntu18.04系统外接显卡(英伟达RTX 2080 Ti)驱动安装
  18. 电脑开远程的几个方法
  19. 惠普p1106打印机安装步骤_hp1106打印机安装驱动下载
  20. MyBatis映射文件如何给数据库的int类型字段“插入”string类型记录

热门文章

  1. 工件SSMwar exploded 部署工件时出错。请参阅服务器日志了解详细信息
  2. chrome 有哪些有用的插件
  3. uniapp-自定义导航栏样式不生效问题(一)
  4. cmd 新增dns_win10在cmd中修改dns方法教程
  5. ATTCK靶场系列(二)
  6. 海带不能和什么一起吃 吃海带的好处
  7. 不能与牛肉一起吃的食物
  8. 2013 ACM-ICPC南京赛区全国邀请赛
  9. Linux命令 ln
  10. word设置图片上边空白24点,下边9点,图片和图注在一行怎么办?