android下关于Canvas和Drawable的一点认识

  最近刚刚写了一个贪吃蛇的游戏,需要不断绘图,也就对Canvas和Drawable有了一点点认识。

  首先是Canvas。Canvas的直译就是画布,负责在View上进行各种绘画,但实际上Canvas是在一个Bitmap对象上进行绘画的,该Bitmap会告诉Canvas如何进行绘画(比如每个像素点如何存储这些),而之后在Canvas上所进行的各种绘画都会保存在该Bitmap上。例如下面的一段代码:

  Bitmap bitmap = Bitmap.createBitmap(20, 20, Bitmap.Config.ARGB_8888);
Canvas canvas=new Canvas(bitmap);
Paint paint=new Paint();
paint.setColor(Color.GREEN);
canvas.drawCircle(10, 10, 10, paint);

  首先bitmap设置了在该Bitmap上每个像素点用4个字节来存储(RGB以及透明度,每一项用8位来表示0-255共256中级别);然后建立一个以该Bitmap为基础的canvas,然后再这个Canvas上画一个绿色圆。现在变量bitmap就是一个包含有绿色圆的20*20的位图了,如果不行,各位大可以在一个view的OnDraw()函数上直接画这个bitmap。

  大多数时候,我们的绘图操作都是在View的OnDraw(Canvas canvas)函数中进行操作的,而系统已经给我们配置了一个canvas,不需要我们去设定该Canvas的Bitmap,当然如果你不喜欢默认的设置也可以自己设定。而如果不是在OnDraw函数中进行设定的话就要自己设定Bitmap了。

  另外还想说的一点就是,是Canvas在响应各种与画图有关的函数。

  对于Drawable没有太多的可说的,简单地说其实就是一个管理各种drawable资源文件夹下各种资源的对象而已。在这里仅介绍其两个类函数,一个是setBounds()函数该函数设定具体的drawable资源应该画在何种范围之下,必须调用该函数来进行设定(至少SDK上是这样说的),另外一个就是draw(Canvas canvas)函数,这是指将该drawable资源画在具体的canvas之上,并且按照setBounds函数设定的范围以及Canvas的bitmap的配置。

例:

    public void loadTile( Drawable tile) {
        Bitmap bitmap = Bitmap.createBitmap(mTileSize, mTileSize, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        tile.setBounds(0, 0, mTileSize, mTileSize);
        tile.draw(canvas);
    }

  此时在一个canvas上画上了一个Drawable对象,也就是bitmap现在所显示的就是这个Drawable对象了。

时间: 2024-09-10 08:46:19

android下关于Canvas和Drawable的一点认识的相关文章

Android编程之canvas绘制各种图形(点,直线,弧,圆,椭圆,文字,矩形,多边形,曲线,圆角矩形)_Android

本文实例讲述了Android编程之canvas绘制各种图形的方法.分享给大家供大家参考,具体如下: 1.首先说一下canvas类: Class Overview The Canvas class holds the "draw" calls. To draw something, you need 4 basic components: A Bitmap to hold the pixels, a Canvas to host the draw calls (writing into

android中图形图像处理之drawable用法分析_Android

本文实例讲述了android中图形图像处理之drawable用法.分享给大家供大家参考.具体如下: 一.如何获取 res 中的资源 数据包package:android.content.res 主要类:Resources 其主要接口按照功能,划分为以下三部分: getXXXX() 例如: int getColor(int id) Drawable getDrawable(int id) String getString(int id)  直接获取res中存放的资源 InputStream ope

Android下拉刷新上拉加载控件(适用于所有View)_Android

     前面写过一篇关于下拉刷新控件的文章下拉刷新控件终结者:PullToRefreshLayout,后来看到好多人还有上拉加载更多的需求,于是就在前面下拉刷新控件的基础上进行了改进,加了上拉加载的功能.不仅如此,我已经把它改成了对所有View都通用!可以随心所欲使用这两个功能~~     我做了一个大集合的demo,实现了ListView.GridView.ExpandableListView.ScrollView.WebView.ImageView.TextView的下拉刷新和上拉加载.后

Android下拉刷新上拉加载控件(适用于所有View)

前面写过一篇关于下拉刷新控件的文章下拉刷新控件终结者:PullToRefreshLayout,后来看到好多人还有上拉加载更多的需求,于是就在前面下拉刷新控件的基础上进行了改进,加了上拉加载的功能.不仅如此,我已经把它改成了对所有View都通用!可以随心所欲使用这两个功能~~ 我做了一个大集合的demo,实现了ListView.GridView.ExpandableListView.ScrollView.WebView.ImageView.TextView的下拉刷新和上拉加载.后面会提供demo的

android中图形图像处理之drawable用法分析

本文实例讲述了android中图形图像处理之drawable用法.分享给大家供大家参考.具体如下: 一.如何获取 res 中的资源 数据包package:android.content.res 主要类:Resources 其主要接口按照功能,划分为以下三部分: getXXXX() 例如: int getColor(int id) Drawable getDrawable(int id) String getString(int id)  直接获取res中存放的资源 InputStream ope

Android下拉刷新控件PullToRefresh实例解析_Android

Android中很多时候都会用到上下拉刷新,这是一个很常用的功能,Android的v4包中也为我们提供了一种原生的下拉刷新控件--SwipeRefreshLayout,可以用它实现一个简洁的刷新效果,但今天我们的主角并不是它,而是一个很火的第三方的上下拉刷新控件--PullToRefresh.PullToRefresh包括PullToRefreshScrollView.PullToRefreshListView.PullToRefreshGridView等等很多为我们提供的控件,我们可以在xml

Android下的CMD命令之关机重启及重启recovery_Android

Android刚兴起的时候,着实让一些小众软件火了一把,切水果,Tom猫,吹裙子就是其中的代表,当然还有实用性很强的关机重启软件,我们去百度上搜索一下. 截图: 一.了解CMD 命令 我们在cmd下进行的操作什么的,这里就不一一细说了我们只要知道下面这几条命令就可以了 重启:su -c reboot 关机:reboot -p 有了这个思路,我们就可以去实现了 activity_main.xml <LinearLayout xmlns:android="http://schemas.andr

Android 下拉刷新框架实现、仿新浪微博、QQ好友动态滑到底部自动加载

苦苦找寻的2个版本,经过测试好用.再次感谢原作者! 1.第一个版本 Android 下拉刷新框架实现 http://blog.csdn.net/leehong2005/article/details/12567757 前段时间项目中用到了下拉刷新功能,之前在网上也找到过类似的demo,但这些demo的质量参差不齐,用户体验也不好,接口设计也不行.最张没办法,终于忍不了了,自己就写了一个下拉刷新的框架,这个框架是一个通用的框架,效果和设计感觉都还不错,现在分享给各位看官. 1. 关于下拉刷新 下拉

【黑马Android】(02)短信发送器/布局演示/android下单位/android下Junit/保存数据/android下权限/xml解析和序列化

短信发送器 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.itheima28.smssender" android:versionCode="1" android:versionName=&quo