android 调用发短信里面的draw什么时候调用

android view组件draw onDraw,dispatchDraw
Android的view组件显示主要经过mesure, layout和draw这三个过程。在mesure阶段里调用mesure(int widthSpec, int heightSpec)方法,这个方法是final不能被重写,
Android的显示主要经过mesure, layout和这三个过程。在mesure阶段里调用mesure(int widthSpec, int heightSpec)方法,这个方法是final不能被重写,在这个过程里会调用onMesure(int widthSpec,
int heightSpec)方法。当设置好大小后,调用final layout(int l, int t, int r, int b)方法进行布局,在这个过程里会调用onLayout(boolean changed, int l, int t, int r, int b)方法,所以处理组件的布局通常要重写onMesure和onLayout这两个方法。
&&&&View组件的绘制会调用(Canvas canvas)方法,这个方法在源代码里看不到在哪里调用...draw过程中主要是先画Drawable背景,对drawable调用setBounds()然后是draw(Canvas
c)方法.有点注意的是背景drawable的实际大小会影响组件的大小,drawable的实际大小通过getIntrinsicWidth()和getIntrinsicHeight()获取,当背景比较大时view组件大小等于背景drawable的大小,不过俺没有在源代码里找到布局时调用过&getIntrinsicWidth()和getIntrinsicHeight()方法...
&&&&画完背景后,draw过程会调用(Canvas canvas)方法,然后就是spatchDraw(Canvas
canvas)方法, spatchDraw()主要是分发给子组件进行绘制,我们通常定制组件的时候重写的是()方法。值得注意的是ViewGroup容器组件的绘制,当它没有背景时直接调用的是dispatchDraw()方法, 而绕过了draw()方法,当它有背景的时候就调用draw()方法,,而draw()方法里包含了dispatchDraw()方法的调用。因此要在ViewGroup上绘制东西的时候往往重写的是dispatchDraw()方法而不是onDraw()方法,或者自定制一个Drawable,重写它的draw(Canvas
c)和getIntrinsicWidth(),
getIntrinsicHeight()方法,然后设为背景
你最喜欢的 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
DroidDraw使用教程
下载积分:30
内容提示:Android DroidDraw使用
文档格式:PDF|
浏览次数:1278|
上传日期: 10:02:55|
文档星级:
该用户还上传了这些文档
DroidDraw使用教程
官方公共微信Android中使用SurfaceView和Canvas来绘制动画 - Android移动开发技术文章_手机开发 - 红黑联盟
Android中使用SurfaceView和Canvas来绘制动画
其实每个View中都有Canvas可以用来绘制动画,只需要在这个View中重载onDraw()方法就可以,但是SurfaceView类是一个专门用来制动动画的类。
Canvas(中文叫做"画布")就和HTML5中的canvas标签一样可以在一定区域内自由绘制图形。Canvas+SurfaceView制作的动画与View Animation和Property Animation这类动画比起来更加适合大量的集中播放的动画,比如游戏画面、相机的图像显示等。
因为SurfaceView通常会在另一个专门的线程中不断重绘界面,所以不像其他动画那样要在主线程(UI线程)中播放动画的同时还要消耗一定的流畅度用来响应用户输入。
在使用SurfaceView时需要注意下面这些要点:
1)每个SurfaceView都需要一个SurfaceHolder对象来处理这个SurfaceView的生命周期和获取这个SurfaceView的Canvas对象,可以通过调用SurfaceView的getHolder()方法来获取它的SurfaceHolder对象。
2)使用SurfaceView时一般是通过继承SurfaceView的方式来实现,可以顺便implements两个接口,分别是Runnable和SurfaceHolder.Callback。第二个接口需要重载三个函数,这三个函数就是SurfaceView的生命周期处理了,可以通过SurfaceHolder对象的addCallback()方法把实现好的Callback对象传进去。
3)在使用SurfaceView的Canvas时一定要记得加锁同步,因为不能让画布同时绘制多个图案,通过调用这个SurfaceView的SurfaceHolder对象的lockCanvas()就可以做到这一点。绘制完毕后在调用SurfaceHolder对象的unlockCanvasAndPost()方法就可以解锁并更新。
下面给出了一个用SurfaceView和Canvas绘制动画的例子,一般直接复制上就可以运行看到效果:
package com.example.
import android.app.A
import android.content.C
import android.graphics.B
import android.graphics.BitmapF
import android.graphics.C
import android.graphics.C
import android.graphics.P
import android.os.B
import android.view.M
import android.view.SurfaceH
import android.view.SurfaceV
import android.widget.T
public class MainActivity extends Activity {
* 这个类用来当测试的物件,会沿着方形路线持续移动
class GameObject {
public GameObject() {
this.img = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
this.x = 100;
this.y = 100;
this.paint = new Paint();
// 在SurfaceView加锁同步后传给自己的Canvas上绘制自己
public void drawSelf(Canvas canvas) {
canvas.drawBitmap(img, x, y, paint);
// 获取物件下一次要绘制的位置(这里是沿着一个边长为400的正方形不断运动的)
public void getNextPos() {
if (y == 100 && x != 500)
else if (x == 500 && y != 500)
else if (y == 500 && x != 100)
else if (x == 100 && y != 100)
* 这个类就是加工了SurfaceView之后的类,所有要运动的物件都最终放在这里进行绘制
class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback, Runnable {
private T // SurfaceView通常需要自己单独的线程来播放动画
private SurfaceHolder surfaceH
private GameO
public MySurfaceView(Context c) {
this.surfaceHolder = this.getHolder();
this.surfaceHolder.addCallback(this);
this.obj = new GameObject();
public void run() {
while (true) {
obj.getNextPos();
canvas = this.surfaceHolder.lockCanvas(); // 通过lockCanvas加锁并得到SurfaceView的画布
canvas.drawColor(Color.BLACK);
obj.drawSelf(canvas); // 把SurfaceView的画布传给物件,物件会用这个画布将自己绘制到上面的某个位置
this.surfaceHolder.unlockCanvasAndPost(canvas); // 释放锁并提交画布进行重绘
Thread.sleep(10); // 这个就相当于帧频了,数值越小画面就越流畅
} catch (Exception e) {
e.printStackTrace();
public void surfaceDestroyed(SurfaceHolder arg0) {
Toast.makeText(getApplicationContext(), "SurfaceView已经销毁", Toast.LENGTH_LONG).show();
public void surfaceCreated(SurfaceHolder arg0) {
Toast.makeText(getApplicationContext(), "SurfaceView已经创建", Toast.LENGTH_LONG).show();
this.thread = new Thread(this);
this.thread.start();
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
// 这里是SurfaceView发生变化的时候触发的部分
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MySurfaceView(getApplicationContext())); // 别忘了开始的时候载入我们加工好的的SurfaceView
public boolean onCreateOptionsMenu(Menu menu) {
// I this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
如果转载请注明出处:http://blog.csdn.net/gophersAndroid drawBitmapMesh扭曲图像 工程代码导入即可使用 - 下载频道
- CSDN.NET
&&&&Android drawBitmapMesh扭曲图像 工程代码导入即可使用
Android drawBitmapMesh扭曲图像 工程代码导入即可使用
实现功能:扭曲
说明:用httpclient 实现在线图片的下载展示,并实现图片处理。
如果,网络图片不存在了,请在代码中修改图片路径。
技术:View,Bitmap,Canvas,AsyncTask,httpclient
来实现其基本功能。部分有注释,例子;来自哪里也还有说明。
若举报审核通过,可奖励20下载分
被举报人:
dongbeiman
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
您可能还需要
移动开发下载排行

我要回帖

更多关于 android 调用发短信 的文章

 

随机推荐