- 浏览: 1697321 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (159)
- android 2D (13)
- android 控件 (12)
- android UI (16)
- android 动画 (5)
- android 线程 (3)
- android 数据存储 (15)
- android 基础 (13)
- android xml解析 (1)
- android 多媒体开发 (4)
- android 服务 (4)
- android 安全 (1)
- android WebKit以及相关 (3)
- android 电话 (2)
- android 首选项 (5)
- java基础 (16)
- java 多线程 (1)
- java IO (7)
- android工具使用篇 (1)
- android素材资源区 (1)
- android教程资源区 (1)
- java_android异常记录 (5)
- android问题记录 (1)
- android 推荐资源 (1)
- android 源码篇 (3)
- android SDK (2)
- Google Map For Android (2)
- android 项目问题 (2)
- git (0)
- android API 变化 (1)
- MyEclipse (2)
- Swing组件 (1)
- 活法 (0)
- 其它 (2)
- linux (7)
- 菜鸟的java学习笔记 (0)
- 网络 (0)
- 健康 (1)
- Eclipse在Ubuntu下无法双击启动解决办法 (1)
最新评论
-
tydyz:
引用
android SQLiteOpenHelper使用示例 -
tydyz:
[color=red][/color]
android SQLiteOpenHelper使用示例 -
tydyz:
[flash=200,200][flash=200,200][ ...
android SQLiteOpenHelper使用示例 -
梁家大丫头:
写的还不错,不过不是我需要的。
android 理解和使用自定义权限 -
love_java_cc:
牛逼,太齐全了,收藏
MyEclipse 快捷键大全
这篇文章请大家仔细看,多动手试试,多想想了 因为可能有些地方 有点说不清楚。
大家都知道在我们要显示一个自己定义的View有2中方法,第一种:是直接new 一个我们的View对象并且setContentView(myView); 假如我们自己定义的View对象叫myView 其实我们在Activity里边就2行代码就搞定了
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
其中xiaohang.zhimeng 是我们的包名。 用这种方式 必须在我们自定义的View类也就是MyView里边 加上这样个构造方法
这我在前边文章里边也已经提过了http://byandby.iteye.com/blog/829894 还有我想我们有必要知道一下 就是 不管我们用哪种方式 不管是放在布局文件里边,还是自己直接new一个对象 一定 执行的有2个方法 就是 构造方法 和 onDraw方法。下边我们还是先来看一个例子吧,这个例子来自moandroid 我加了点注释http://www.moandroid.com/?p=764&cpage=1#comment-1634 我们先来看2张图片
就是 一个图像旋转的例子 我们上代码吧。
testActivity我们的Activity类
布局文件
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<testView.moandroid.testView
android:id="@+id/testView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tileSize="12"/>
</FrameLayout>
testView类 这个类就是我们自己定义的View类了 这里我们把它放在布局文件中加载进来
好了 我不知道 大家 看完这个例子 有没有什么不明白的地方? 或者哪里有疑问?为什么要这样? 我就说说我的疑问吧,我看完这个例子就有很多问题。大家都注意到了 我们的testView里边有一个initBitmap方法 还有这么一句
把文字画到屏幕上了吗 ?为什么还要到 onDraw里边在指定位图再画一次 ? 刚开始晕的不行 我不知道这是为什么 在这里我就不贴代码了 其实大家可以试试的 比如我自己定义一方法 我把所有的画图操作都放到我自己定义的方法里边来,我在自己 new 一个Canvas对象 并且调用它的drawBitmap 绘制位图 试试看。我就不用onDraw方法来画图。我也不用onDraw方法提供的 canvas对象。这里我就不演示了 大家 尽管自己疯狂的试试吧。 我想结果肯定是 不是异常,就是图画不出来 前提是你得用 自己 new 一个Canvas对象。就是你得用自己new 的Canvas对象去调用drawBitmap方法。
那我为什么用自己定义的 Canvas对象就不能画出图来呢? 不知道我的意思表达清楚没有,这里 我觉得一定得多试试 了不然没体会的。其实大家可以多看看 不管是我博客的例子还是网上的例子 或者书上的例子,其实我也才学android不久 你就会发现 所有的 画图不管是简单的 花一些 几何图像 ,长方形,圆形啊。 还是 一些 图片的 旋转缩放操作啊,这些操作我的 博客里边也有 我们应该注意到它们用的都是 Draw方法提供的那个 Canvas对象。 像上边 mo-android的那个例子 它虽然 new 了一个Canvas 但是最后还得去 onDraw方法里边 用onDraw方法提供的那个 canvas对象 调用drawBitmap方法来显示位图 而这个位图恰恰是与 刚才new 的那个Canvas对象关联的。这里先给大家看几个方法吧,就是觉得应该知道或者得注意一下。
构建一个具有指定位图绘制到画布上。位图必须是可变的。在画布最初的密度是与给定的位图的密度相同,这就是Canvas类的一个构造方法没什么,这里提示一下它需要的是一个 可变的位图。 下一个
此方法说明:指定一个可变的位图绘制到画布,画图的密度匹配位图,这也是Canvas的一个方法 也是需要一个可变的位图。
Bitmap有这样一个方法来判断位图是否可变 如果可变返回值为true
createBitmap是Bitmap类的一个静态方法 它返回的也是一个 可变的位图。我为什么这样说呢 ?因为有图为证
Bitmap的源码里有这样一个变量
大家注意看一下图中的mIsMutable 的值 为true 刚才上边已经说了Bitmap有一个isMutable方法可以判断一个位图是否为可变 值为true说明是可变的。
上边那个疑问,我想大家都还记得。我也在网上查了查,首先必须告诉大家我们的Canvas 类里边有 这样两个对象大家可以打开这个类的源码看看。。
在android 有这样一个概念 就是 native canvas 这里就不翻译了,不知道叫啥好。(比如什么母画布或者本地画布) 我们的native canvas 可以是屏面或者是 GL 或者 图片画布。如果是屏面,我们的GL对象 mGL将是null, mBitmap可能会也可能不会 目前(我们的默认构造方法创建一个画布,但是这个画布没有屏面) 也就是说如果你这样创建一个画布
Canvas canvas = new Canvas(); 这时候这个canvas 对象 将没有屏面 也没有 java-bitmap 可以理解为java的位图 。 如果我们是以Gl 为 基础(native canvas),然后mBitmap将是空的,mGl不能为空。因此这2个对象 不可能都是非空的 因为这2个对象只要有一个不为空,另外的一个就得为空。但是有可能两个都为空。如下图
所以我觉得那个onDraw(Canvas canvas)方法里边的那个Canvas对象和我们自己new的是有区别的,大家可以在试试 直接 用onDraw方法里边的 Canvas对象 调用 宽度和高度试试
canvas.getWidth canvas.getHeight 得到的 是 320 和 480 也就是我屏幕的高和宽。如果你自己定义 new 一个 Canvas 这样 Canvas canvas = new Canvas() 你在用这个canvas调用高度和宽度 试试看, 我试了一下我发现者 调用高度和宽度后边的代码都不会执行了,很是奇怪呵呵,下面在来一点 关于UI的说明,参考了Android native draw 这篇文章点击这里可以查看这篇文章 http://hi.baidu.com/xxw8393/blog/item/308a841e89b1fbfe1bd5769a.html
在 Android 上,有一個 graphic engine ,称为 Skia 。 Skia 的功能约等于 Cairo ,功能上相似,但 Skia 没有支持 Cairo, Android 的 Java Code 都是透過 Skia 进行绘图,而 Skia 主要的 class type 是 SkCanvas ,所的有绘图功能都建立在这个 class 上。因此,如果我們能在 native code 取得 Android 所建立的 SkCanvas ,能直接使用 Skia 对画面做輸出。
在 Android 的 UI 设计里,每一個 UI component 都是一個 view ;例如: button 、 label 等等,全是 view 。当Android 要画一个view 時,会呼叫 view 的 onDraw() 画出 component 的外觀。而 Android 会将一個 android.graphics.Canvas type 的物件,当成参数給 onDraw() 。 onDraw() 就在这个 canvas 上输出 component 的外观,例如画一个button 。这个 canvas 其实就对映到一个 SkCanvas ,我们只要在这个 canvas 上作画,就等于画到画面上的一个区域。 不知道 能不能是大家理解的更深刻一点。 还有这篇文章大家一定看看吧 CSDN 一醉千年大哥的 有深度,http://blog.csdn.net/yili_xie/archive/2009/11/12/4803565.aspx 在它的文章中也提到这件事情,大家可以仔细阅读一下。
今天又正好看到杨丰盛老师的 双缓冲的例子 我在这里把那个自定义的View类贴出来
首先先不说它有没有双缓冲,好像没有但是又有点那个意思。 呵呵。请大家注意看这个类的构造方法吧 然后再和上边 moandroid那个例子 对比 看看有没有什么相似的地方。我看到这例子和看到上边那个例子 的疑问 一样 就是 在 GameView类里边我们已经 执行了
这句 为什么 又跑到 onDraw方法 指定位图然后显示到屏幕上。 呵呵。发现论坛上也有一些人 困惑这里。 希望高手能表达一下观点,最好整理一篇文章出来 呵呵,让我们这些新学的菜鸟 更明白些。期待大家自由表达自己的观点。
大家都知道在我们要显示一个自己定义的View有2中方法,第一种:是直接new 一个我们的View对象并且setContentView(myView); 假如我们自己定义的View对象叫myView 其实我们在Activity里边就2行代码就搞定了
MyView myView = new MyView(this); setContentView(myView);第二种方式就是 把它放到我们的布局文件中,例如这样<xiaohang.zhimeng.MyView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
其中xiaohang.zhimeng 是我们的包名。 用这种方式 必须在我们自定义的View类也就是MyView里边 加上这样个构造方法
public MyView(Context context, AttributeSet attributeSet){ super(context, attributeSet); }
这我在前边文章里边也已经提过了http://byandby.iteye.com/blog/829894 还有我想我们有必要知道一下 就是 不管我们用哪种方式 不管是放在布局文件里边,还是自己直接new一个对象 一定 执行的有2个方法 就是 构造方法 和 onDraw方法。下边我们还是先来看一个例子吧,这个例子来自moandroid 我加了点注释http://www.moandroid.com/?p=764&cpage=1#comment-1634 我们先来看2张图片
就是 一个图像旋转的例子 我们上代码吧。
testActivity我们的Activity类
package testView.moandroid; import android.app.Activity; import android.os.Bundle; public class testActivity extends Activity { private testView mTestview; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mTestview = (testView) findViewById(R.id.testView); mTestview.initBitmap(320,240,0xcccccc); } }
布局文件
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<testView.moandroid.testView
android:id="@+id/testView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tileSize="12"/>
</FrameLayout>
testView类 这个类就是我们自己定义的View类了 这里我们把它放在布局文件中加载进来
package testView.moandroid; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Typeface; import android.graphics.Bitmap.Config; import android.util.AttributeSet; import android.view.View; public class testView extends View { private Bitmap mbmpTest = null; private final Paint mPaint = new Paint(); private final String mstrTitle = "感受Android带给我们的新体验"; public testView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); mPaint.setColor(Color.GREEN); } public testView(Context context, AttributeSet attrs) { super(context, attrs); mPaint.setColor(Color.GREEN); } public boolean initBitmap(int w, int h, int c) { //返回具有指定宽度和高度可变的位图,它的初始密度可以调用getDensity() mbmpTest = Bitmap.createBitmap(w, h, Config.ARGB_8888); //把一个具有指定的位图绘制到画布上。位图必须是可变的。 //在画布最初的目标密度是与给定的位图的密度相同,返回一个具有指定位图的画布 Canvas canvas = new Canvas(mbmpTest); //设置画布的颜色 canvas.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(22); //0,100指定文字的起始位置 canvas.drawText(mstrTitle, 0, 100, p); return true; } @Override public void onDraw(Canvas canvas) { super.onDraw(canvas); if (mbmpTest != null) { Matrix matrix = new Matrix(); // matrix.postScale(0.5f, 0.5f); //以 120,120这个点位圆心 旋转90度 // matrix.setRotate(90,120,120); //使用指定的矩阵绘制位图 canvas.drawBitmap(mbmpTest, matrix, mPaint); } } }
好了 我不知道 大家 看完这个例子 有没有什么不明白的地方? 或者哪里有疑问?为什么要这样? 我就说说我的疑问吧,我看完这个例子就有很多问题。大家都注意到了 我们的testView里边有一个initBitmap方法 还有这么一句
canvas.drawText(mstrTitle, 0, 100, p);这个方法里边的 代码 请大家 一定要仔细 看看 我看完之后的疑问就是 我们在initBitmap方法里边不是都调用
canvas.drawText(mstrTitle, 0, 100, p);
把文字画到屏幕上了吗 ?为什么还要到 onDraw里边在指定位图再画一次 ? 刚开始晕的不行 我不知道这是为什么 在这里我就不贴代码了 其实大家可以试试的 比如我自己定义一方法 我把所有的画图操作都放到我自己定义的方法里边来,我在自己 new 一个Canvas对象 并且调用它的drawBitmap 绘制位图 试试看。我就不用onDraw方法来画图。我也不用onDraw方法提供的 canvas对象。这里我就不演示了 大家 尽管自己疯狂的试试吧。 我想结果肯定是 不是异常,就是图画不出来 前提是你得用 自己 new 一个Canvas对象。就是你得用自己new 的Canvas对象去调用drawBitmap方法。
那我为什么用自己定义的 Canvas对象就不能画出图来呢? 不知道我的意思表达清楚没有,这里 我觉得一定得多试试 了不然没体会的。其实大家可以多看看 不管是我博客的例子还是网上的例子 或者书上的例子,其实我也才学android不久 你就会发现 所有的 画图不管是简单的 花一些 几何图像 ,长方形,圆形啊。 还是 一些 图片的 旋转缩放操作啊,这些操作我的 博客里边也有 我们应该注意到它们用的都是 Draw方法提供的那个 Canvas对象。 像上边 mo-android的那个例子 它虽然 new 了一个Canvas 但是最后还得去 onDraw方法里边 用onDraw方法提供的那个 canvas对象 调用drawBitmap方法来显示位图 而这个位图恰恰是与 刚才new 的那个Canvas对象关联的。这里先给大家看几个方法吧,就是觉得应该知道或者得注意一下。
Public Canvas(Bitmap bitmap)
构建一个具有指定位图绘制到画布上。位图必须是可变的。在画布最初的密度是与给定的位图的密度相同,这就是Canvas类的一个构造方法没什么,这里提示一下它需要的是一个 可变的位图。 下一个
Public void setBitmap(Bitmap bitmap)
此方法说明:指定一个可变的位图绘制到画布,画图的密度匹配位图,这也是Canvas的一个方法 也是需要一个可变的位图。
public final boolean isMutable ()
Bitmap有这样一个方法来判断位图是否可变 如果可变返回值为true
Bitmap bitmap = Bitmap.createBitmap(160, 250, Config.ARGB_8888);
createBitmap是Bitmap类的一个静态方法 它返回的也是一个 可变的位图。我为什么这样说呢 ?因为有图为证
Bitmap的源码里有这样一个变量
private final boolean mIsMutable;
大家注意看一下图中的mIsMutable 的值 为true 刚才上边已经说了Bitmap有一个isMutable方法可以判断一个位图是否为可变 值为true说明是可变的。
上边那个疑问,我想大家都还记得。我也在网上查了查,首先必须告诉大家我们的Canvas 类里边有 这样两个对象大家可以打开这个类的源码看看。。
private Bitmap mBitmap; // if not null, mGL must be null private GL mGL;
在android 有这样一个概念 就是 native canvas 这里就不翻译了,不知道叫啥好。(比如什么母画布或者本地画布) 我们的native canvas 可以是屏面或者是 GL 或者 图片画布。如果是屏面,我们的GL对象 mGL将是null, mBitmap可能会也可能不会 目前(我们的默认构造方法创建一个画布,但是这个画布没有屏面) 也就是说如果你这样创建一个画布
Canvas canvas = new Canvas(); 这时候这个canvas 对象 将没有屏面 也没有 java-bitmap 可以理解为java的位图 。 如果我们是以Gl 为 基础(native canvas),然后mBitmap将是空的,mGl不能为空。因此这2个对象 不可能都是非空的 因为这2个对象只要有一个不为空,另外的一个就得为空。但是有可能两个都为空。如下图
所以我觉得那个onDraw(Canvas canvas)方法里边的那个Canvas对象和我们自己new的是有区别的,大家可以在试试 直接 用onDraw方法里边的 Canvas对象 调用 宽度和高度试试
canvas.getWidth canvas.getHeight 得到的 是 320 和 480 也就是我屏幕的高和宽。如果你自己定义 new 一个 Canvas 这样 Canvas canvas = new Canvas() 你在用这个canvas调用高度和宽度 试试看, 我试了一下我发现者 调用高度和宽度后边的代码都不会执行了,很是奇怪呵呵,下面在来一点 关于UI的说明,参考了Android native draw 这篇文章点击这里可以查看这篇文章 http://hi.baidu.com/xxw8393/blog/item/308a841e89b1fbfe1bd5769a.html
在 Android 上,有一個 graphic engine ,称为 Skia 。 Skia 的功能约等于 Cairo ,功能上相似,但 Skia 没有支持 Cairo, Android 的 Java Code 都是透過 Skia 进行绘图,而 Skia 主要的 class type 是 SkCanvas ,所的有绘图功能都建立在这个 class 上。因此,如果我們能在 native code 取得 Android 所建立的 SkCanvas ,能直接使用 Skia 对画面做輸出。
在 Android 的 UI 设计里,每一個 UI component 都是一個 view ;例如: button 、 label 等等,全是 view 。当Android 要画一个view 時,会呼叫 view 的 onDraw() 画出 component 的外觀。而 Android 会将一個 android.graphics.Canvas type 的物件,当成参数給 onDraw() 。 onDraw() 就在这个 canvas 上输出 component 的外观,例如画一个button 。这个 canvas 其实就对映到一个 SkCanvas ,我们只要在这个 canvas 上作画,就等于画到画面上的一个区域。 不知道 能不能是大家理解的更深刻一点。 还有这篇文章大家一定看看吧 CSDN 一醉千年大哥的 有深度,http://blog.csdn.net/yili_xie/archive/2009/11/12/4803565.aspx 在它的文章中也提到这件事情,大家可以仔细阅读一下。
今天又正好看到杨丰盛老师的 双缓冲的例子 我在这里把那个自定义的View类贴出来
package com.yarin.android.Examples_05_12; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Bitmap.Config; import android.graphics.drawable.BitmapDrawable; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; public class GameView extends View implements Runnable { /* 声明Bitmap对象 */ Bitmap mBitQQ = null; Paint mPaint = null; /* 创建一个缓冲区 */ Bitmap mSCBitmap = null; /* 创建Canvas对象 */ Canvas mCanvas = null; public GameView(Context context) { super(context); /* 装载资源 */ mBitQQ = ((BitmapDrawable) getResources().getDrawable(R.drawable.qq)).getBitmap(); /* 创建屏幕大小的缓冲区 */ mSCBitmap=Bitmap.createBitmap(320, 480, Config.ARGB_8888); /* 创建Canvas */ mCanvas = new Canvas(); /* 设置将内容绘制在mSCBitmap上 */ mCanvas.setBitmap(mSCBitmap); mPaint = new Paint(); /* 将mBitQQ绘制到mSCBitmap上 */ mCanvas.drawBitmap(mBitQQ, 0, 0, mPaint); /* 开启线程 */ new Thread(this).start(); } public void onDraw(Canvas canvas) { super.onDraw(canvas); /* 将mSCBitmap显示到屏幕上 */ canvas.drawBitmap(mSCBitmap, 0, 0, mPaint); } // 触笔事件 public boolean onTouchEvent(MotionEvent event) { return true; } // 按键按下事件 public boolean onKeyDown(int keyCode, KeyEvent event) { return true; } // 按键弹起事件 public boolean onKeyUp(int keyCode, KeyEvent event) { return false; } public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) { return true; } /** * 线程处理 */ public void run() { while (!Thread.currentThread().isInterrupted()) { try { Thread.sleep(100); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } //使用postInvalidate可以直接在线程中更新界面 postInvalidate(); } } }
首先先不说它有没有双缓冲,好像没有但是又有点那个意思。 呵呵。请大家注意看这个类的构造方法吧 然后再和上边 moandroid那个例子 对比 看看有没有什么相似的地方。我看到这例子和看到上边那个例子 的疑问 一样 就是 在 GameView类里边我们已经 执行了
/* 将mBitQQ绘制到mSCBitmap上 */ mCanvas.drawBitmap(mBitQQ, 0, 0, mPaint);
这句 为什么 又跑到 onDraw方法 指定位图然后显示到屏幕上。 呵呵。发现论坛上也有一些人 困惑这里。 希望高手能表达一下观点,最好整理一篇文章出来 呵呵,让我们这些新学的菜鸟 更明白些。期待大家自由表达自己的观点。
评论
4 楼
ophone
2012-11-03
钻研精神可嘉。
3 楼
ophone
2012-11-03
这个Canvas是有上下文的。
2 楼
forecle
2011-10-18
1,楼说得有理!
1 楼
gaogaf
2011-01-19
如果你写过框架一类的东西,你就不会晕了。
(
把文字画到屏幕上了吗 ?为什么还要到 onDraw里边在指定位图再画一次 ? 刚开始晕的不行 我不知道这是为什么 在这里我就不贴代码了 其实大家可以试试的 比如我自己定义一方法 我把所有的画图操作都放到我自己定义的方法里边来,我在自己 new 一个Canvas对象 并且调用它的drawBitmap 绘制位图 试试看。我就不用onDraw方法来画图。我也不用onDraw方法提供的 canvas对象。这里我就不演示了 大家 尽管自己疯狂的试试吧。 我想结果肯定是 不是异常,就是图画不出来 前提是你得用 自己 new 一个Canvas对象。就是你得用自己new 的Canvas对象去调用drawBitmap方法。
)
看了这一段,觉得你根本就没明白是怎么回事。
除了onDraw参数里的canvas,自己定义的一切Canvas都是浮云。
之所以自己定义,完全是为了得到一个Bitmap,然后再Draw到onDraw里的Canvas上。
(
把文字画到屏幕上了吗 ?为什么还要到 onDraw里边在指定位图再画一次 ? 刚开始晕的不行 我不知道这是为什么 在这里我就不贴代码了 其实大家可以试试的 比如我自己定义一方法 我把所有的画图操作都放到我自己定义的方法里边来,我在自己 new 一个Canvas对象 并且调用它的drawBitmap 绘制位图 试试看。我就不用onDraw方法来画图。我也不用onDraw方法提供的 canvas对象。这里我就不演示了 大家 尽管自己疯狂的试试吧。 我想结果肯定是 不是异常,就是图画不出来 前提是你得用 自己 new 一个Canvas对象。就是你得用自己new 的Canvas对象去调用drawBitmap方法。
)
看了这一段,觉得你根本就没明白是怎么回事。
除了onDraw参数里的canvas,自己定义的一切Canvas都是浮云。
之所以自己定义,完全是为了得到一个Bitmap,然后再Draw到onDraw里的Canvas上。
发表评论
-
android Shader类简介_渲染图像示例
2010-12-02 04:31 29711Android中提供了Shader类专门用来渲染图像 ... -
android 图像缩放
2010-12-01 17:54 7696前面发过一篇如何利用Matrix来旋转图像,那么如何来 ... -
android 图像旋转
2010-12-01 17:00 17504在Android中进行图像旋转需要使用Matri ... -
android 设置Alpha值实现图片渐变效果
2010-11-30 01:59 38512我们要将一个张图片显示在屏幕上,首先需要创建一个显示图 ... -
在android屏幕上 上 下 左 右 四个方向移动法拉利(Image)
2010-11-30 00:42 10287在Android中,项目目录下的"res\d ... -
android 获取Bitmap 的两种方法
2010-11-29 23:09 15468这里我直接贴代码了。 第一种方法 //得到Resour ... -
android 字符串绘制示例
2010-11-27 20:21 3655在游戏开发中,我们不可能全部用图片来显示,很多时候需要 ... -
android Draw Rect 坐标图示
2010-11-27 12:56 24977前两天在博客发了在例子 android Canvas类 ... -
android Canvas类介绍
2010-11-26 11:51 24615当我们调整好画笔 ... -
android Paint和Color类介绍 使用示例
2010-11-25 19:26 31373要绘图,首先得调整画笔,待画笔调整好之后,再将图像绘制 ... -
android SurfaceView 使用示例 why SurfaceView上 不可以用控件的轻微解释
2010-11-25 15:04 24508当我们需要开发一个复杂的游戏的时候,而且对程序的执行效 ... -
android 自定义View类的简单使用 示例
2010-11-24 23:04 26099View类是Android的一个超类,这个类几乎包含 ...
相关推荐
在Android开发中,Canvas是用于在屏幕上绘制图形的重要工具。Canvas提供了丰富的API,使得开发者能够绘制各种复杂的图形,包括直线、曲线、圆形、矩形以及多边形等。本篇文章将详细讲解如何利用Canvas在Android中画...
在Android图形系统中,`Canvas`是用于在Bitmap或Surface上进行绘图操作的重要类。它提供了各种绘制路径、文本、矩形、圆形以及其他图形的方法。`save()`和`restore()`是`Canvas`中两个非常关键的方法,它们主要用于...
Canvas是Android系统中用于图形绘制的核心类,它在Android的视图系统中扮演着至关重要的角色。通过Canvas,开发者可以实现在屏幕上画出各种复杂的图形、文字、图像等元素。Canvas与Bitmap紧密关联,Bitmap是实际存储...
在Android开发中,自定义画布Canvas是实现图形绘制的核心工具。Canvas提供了丰富的API,允许开发者在屏幕上绘制各种形状、图像以及文字等。本教程将深入探讨如何利用Canvas实现绘制和清空画布的功能。 首先,我们...
总结,Android Canvas绘图是Android UI开发中的核心技能之一,掌握其使用可以让我们创建出丰富多样的用户界面和动态效果。通过熟练运用Canvas的各种绘图方法和配合Paint对象,开发者可以自由地在屏幕上创造出任何想...
在Android开发中,Canvas是用于在屏幕上绘制图形的重要工具,它是Android Framework提供的核心绘图类。Canvas使用集合意味着我们可以利用它来绘制一系列图形、文本、图像等元素,从而实现自定义视图或控件。本篇文章...
在Android开发中,Canvas是用于在屏幕上绘制图形和图像的核心组件。`drawBitmap()`方法是Canvas的一个关键函数,用于在Canvas上绘制Bitmap图像。本文将深入解析`drawBitmap()`方法的参数及其用法,并通过实例来说明...
Canvas是Android系统提供的一个用于绘制2D图形的对象,它可以对Bitmap进行操作,比如画线、画圆、画矩形等。在Android中,我们可以通过重写View的`onDraw()`方法来利用Canvas进行自定义绘图。 要将矩形图片变为圆角...
该代码是一个完整的Android工程,详细演示如了如何使用Android中的各种drawXXX方法,以及画笔Paint如何影响绘制的效果。 具体参见博文: http://blog.csdn.net/iispring/article/details/49770651
- **Canvas**:Canvas是Android中的画布,提供了各种绘制方法,如drawRect(), drawText()等,让我们能够在屏幕上绘制图形和文本。 - **Paint**:Paint是Android的画笔,它定义了图形和文本的样式,如颜色、字体...
`Canvas`类提供了丰富的绘图方法,让我们能够在Bitmap或者Surface上绘制线条、形状、文本等元素。在这个"Android画布Canvas之连线动画Demo"中,我们将深入探讨如何利用Canvas实现动态的连线动画效果,包括控制动画...
Android Canvas是Android系统中用于图形绘制的核心组件,它在Android应用开发中扮演着至关重要的角色。...在学习过程中,参考提供的“android-canvas.pdf”文档,将会对理解Canvas的工作原理和实践技巧有很大帮助。
在Android开发中,Canvas是用于在屏幕上绘制图形的重要工具,它是`android.graphics.Canvas`类的实例。本篇文章将深入探讨如何使用Android Canvas进行图形绘制,包括基本概念、常用方法以及实际应用示例。 Canvas...
在Android开发中,Canvas是用于在屏幕上绘制2D图形的核心组件。Kotlin作为一种现代、简洁的编程语言,已经成为Android开发的首选。本篇文章将深入探讨如何在Kotlin中更有效地利用Canvas进行绘制,以实现丰富的视觉...
查看源码,研究其中的onDraw()方法和如何处理触摸事件,是学习和理解Android Canvas放大、缩小和平移的很好途径。 总的来说,Android的Canvas和Matrix类为开发者提供了强大的图形绘制能力,通过熟练掌握它们,你...
在Android平台上,Canvas是用于在屏幕上绘制图形的重要工具。它提供了丰富的绘图API,使得开发者可以自由地在Bitmap、SurfaceView或View上绘制线条、形状、文本以及自定义的复杂图像。本文将深入探讨Android中Canvas...
在Android开发中,Canvas是图形绘制的核心类,它提供了在Bitmap上进行绘制的基本接口。"android canvas画人"这个主题,意味着我们将探讨如何利用Canvas在Android应用中绘制一个人物图像。下面将详细介绍Canvas的使用...
在Android开发中,Canvas是用于在屏幕上绘制2D图形的核心组件。它允许开发者直接在Bitmap上进行绘制操作,实现各种视觉效果。以下是对标题和描述中提到的各种图形绘制方法的详细说明: 1. **点(Point)**:使用`...
要让撕衣服的动作看起来生动,可以使用Android的动画框架,比如ValueAnimator或ObjectAnimator,来平滑地改变图像的像素数据或Canvas的绘制状态,模拟出动态撕开的过程。 6. **触摸事件处理**: 用户可能需要通过...
"android-canvas-donut-chart.7z"这个压缩包文件很可能包含了一个使用Canvas来实现甜甜圈图(Donut Chart)的示例项目。甜甜圈图是一种数据可视化工具,通常用于展示各项比例关系,它由环形区域组成,中心有一个空洞...