android draw过程,android,view的执行过程onDraw、onSizeChanged,onFinishInflate

小试view的执行过程,此是入门,高手绕道。

--------------------------------------------------------------------------------

此为抛砖引玉,个人看官自己发挥。

结果如下:

12-05 22:23:03.587: D/mDebug(9715): TestView context, attrs=@2131034112

12-05 22:23:03.597: D/mDebug(9715): onFinishInflate

12-05 22:23:03.667: D/mDebug(9715): onSizeChanged,w=240,h=282,oldw=0,oldh=0

12-05 22:23:03.727: D/mDebug(9715): onDraw

12-05 22:23:03.757: D/mDebug(9715): onDraw

[size=l代码如下:[/size]

public class TestView extends View {

public TestView(Context context) {

super(context);

Log.d("mDebug", "TestView context");

}

public TestView(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

Log.d("mDebug", "TestView context,attrs,defStyle attrs="+attrs.getAttributeValue(0));

}

public TestView(Context context, AttributeSet attrs) {

super(context, attrs);

Log.d("mDebug", "TestView context, attrs="+attrs.getAttributeValue(0));

}

@Override

protected void onDraw(Canvas canvas) {

// TODO Auto-generated method stub

super.onDraw(canvas);

Log.d("mDebug", "onDraw");

}

@Override

protected void onFinishInflate() {

// TODO Auto-generated method stub

super.onFinishInflate();

Log.d("mDebug", "onFinishInflate");

}

@Override

protected void onSizeChanged(int w, int h, int oldw, int oldh) {

// TODO Auto-generated method stub

super.onSizeChanged(w, h, oldw, oldh);

Log.d("mDebug", "onSizeChanged,w="+w+",h="+h+",oldw="+oldw+",oldh="+oldh);

}

}

问题: 构造函数的context为何物,attrs从何处来

Android View的绘制过程

首先是view的绘制过程~最主要的分三部分 measure layout draw 看字面意思,计算,布局,画~ android中控件相当于是画在一个无限大的画布上的,那就产生了几个问题 画布无限大, ...

android权限申请执行过程

弹出的授权对口窗口实际上是一个activity(隐式intent启动上图第二个方块里)(com.android.packageinstaller.permission.ui.Grantpermissi ...

android view 中各函数的执行顺数

这个就好像是 activity 的生命周期一样,如果我们要使用自定义的 view,那么就很有必要了解一下 view 的那些能够被重写的函数的执行顺序.废话不多讲,以常用的5个函数为例子,见下文: pa ...

Android View 的绘制流程之 Layout 和 Draw 过程详解 (二)

View 的绘制系列文章: Android View 的绘制流程之 Measure 过程详解 (一) Android View 绘制流程之 DecorView 与 ViewRootImpl 在上一篇  ...

简单研究Android View绘制三 布局过程

2015-07-28 17:29:19 这一篇主要看看布局过程 一.布局过程肯定要不可避免的涉及到layout()和onLayout()方法,这两个方法都是定义在View.java中,源码如下: /* ...

android 中view的绘制过程

view的绘制过程中分别会执行:onMeasure(会多次)计算view的大小,OnLayout(),确定控件的大小和位置 onDraw()绘制view 当Activity获得焦点时,它将被要求绘制自 ...

《Android内核剖析》读书笔记 第13章 View工作原理【View重绘过程】

计算视图大小的过程(Measure) 视图大小,准确的来说应该是指视图的布局大小:我们在layout.xml中为每个UI控件设置的layout_width/layout_height两个属性被用来设置 ...

Android中View的绘制过程 onMeasure方法简述 附有自定义View例子

Android中View的绘制过程 onMeasure方法简述 附有自定义View例子 Android中View的绘制过程 当Activity获得焦点时,它将被要求绘制自己的布局,Android fr ...

【转】Android中View的绘制过程 onMeasure方法简述 附有自定义View例子

Android中View的绘制过程 当Activity获得焦点时,它将被要求绘制自己的布局,Android framework将会处理绘制过程,Activity只需提供它的布局的根节点. 绘制过程从布 ...

随机推荐

mysql进阶之存储过程

往往看别人的代码会有这样的感慨: 看不懂 理还乱 是离愁 别是一番滋味在心头 为什么要使用存储过程? 在mysql开发中使用存储过程的理由: 当希望在不同的应用程序或平台上执行相同的函数,或者封装特定 ...

XSS检测工具 X5S/fiddler

x5s http://xss.codeplex.com/ 5s是fiddler的插件, 协助XSS脚本攻击的穿刺性测试.  需要手动驱动. 安全编码,unicode字符变形,ut-8编码. 5s is ...

Objective-C之Category的使用

*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

关于移动端的font和图片的问题

一.font-family 使用无衬线字体 body { font-family: "Helvetica Neue", Helvetica, STHeiTi, sans-serif ...

VS编译的QT程序发布时产生的AppCrash问题

至少我碰到了三个情况,都是AppCrash错误(以下都指VS2008的Release的设置) 第1个错误,报错模块是程序自己 我使用VS2008 Team with SP1和QT4.86编译程序,一直 ...

150个JS特效脚本

收集了其它一些不太方便归类的JS特效,共150个,供君查阅. 1. simplyScroll simplyScroll这个jQuery插件能够让任意一组元素产生滚动动画效果,可以是自动.手动滚动,水平 ...

java final关键字的详解

final可以修饰成员变量.局部变量.方法.和类 1.final修饰成员变量时,必须在定义时初始化或者在构造方法中初始化 表示该成员变量无法在该类中被更改,但是可以被继承.如果子类不再定义相同名字的成 ...

Python包和版本管理的最好工具----pipenv

pipenv 是Kenneth Reitz大神的作品,提供Python的各个版本间的管理,各种包管理.个人觉得是virtualenv pip等工具的合体. pipenv主要有以下特性: (1)以前我们 ...

LVS负载均衡基础介绍及NET、DR模式配置

LVS:术语: CIP:Client IP:客户端IP: VIP:Virtual Server IP:虚拟主机对外IP: RIP:Real Server IP:真实主机IP: DIP:Director ...

Date类、SimpleDateFormat类

Date 构造方法: 1.无参数构造方法: Date date = new Date(); System.out.println(date);// Thu Mar 28 16:28:40 CST 20 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android中实现加载过程动画可以使用ProgressBar或者自定义View来实现。以下是两种实现方式: 1. 使用ProgressBar ProgressBar是Android系统自带的控件,可以实现加载过程动画。可以通过以下代码实现: ``` <ProgressBar android:id="@+id/progress_bar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:indeterminate="true" /> ``` 其中,android:indeterminate="true"表示ProgressBar是一个不确定进度的动画。 2. 自定义View 可以通过自定义View来实现更加个性化的加载过程动画。以下是一个简单的示例代码: ``` public class LoadingView extends View { private Paint mPaint; private RectF mRectF; private float mStartAngle = 0; private float mSweepAngle = 45; private int mWidth; private int mHeight; public LoadingView(Context context) { super(context); init(); } public LoadingView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); init(); } public LoadingView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { mPaint = new Paint(); mPaint.setColor(Color.RED); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeWidth(10); mPaint.setAntiAlias(true); mRectF = new RectF(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); mRectF.set(0, 0, mWidth, mHeight); canvas.drawArc(mRectF, mStartAngle, mSweepAngle, false, mPaint); mStartAngle += 5; if (mStartAngle >= 360) { mStartAngle = 0; } postInvalidateDelayed(10); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); mWidth = MeasureSpec.getSize(widthMeasureSpec); mHeight = MeasureSpec.getSize(heightMeasureSpec); } } ``` 该自定义View会绘制一个旋转的圆弧,可以通过改变mStartAngle和mSweepAngle的值来改变动画效果。在使用时,直接将该View加入布局即可: ``` <com.example.myapplication.LoadingView android:layout_width="100dp" android:layout_height="100dp" android:layout_centerInParent="true" /> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值