Android自定义控件基础知识----View的生命周期
来源:互联网 发布:如何在淘宝上购物 编辑:程序博客网 时间:2024/05/20 06:08
项目结构
核心代码:
MyTextView中
package com.zhh.myview;import android.content.Context;import android.content.IntentSender;import android.graphics.Canvas;import android.util.AttributeSet;import android.util.Log;import android.view.MotionEvent;import android.view.View;import android.widget.TextView;/** * * http://www.gulixueyuan.com/course/112/learn#lesson/1748 */public class MyTextView extends TextView{ /** * 创建对象加入布局时用到 * setContentView(new MyTextView(context))时会被调用 * @param context */ public MyTextView(Context context) { super(context); Log.e("111","MyTextView(Context context)"); } /** *在xml显示布局时用到 *setContentView(R.layout.activity_main);时会被调用 */ public MyTextView(Context context, AttributeSet attrs) { super(context, attrs); Log.e("111","MyTextView(Context context, AttributeSet attrs)"); } /** * 重写onFinishInflate得到子view对象 * 布局文件加载成功 * setContentView(new MyTextView(context))时会被调用 * setContentView(R.layout.activity_main);时不会被调用 */ @Override protected void onFinishInflate() { super.onFinishInflate(); Log.e("111","onFinishInflate()"); } /** * 和window对象关联 * 重写onAttachedToWindow也可得到子view对象 */ @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); Log.e("111","onAttachedToWindow()"); } /** * 测量 * 计算并确定视图的大小 * 得到当前视图的宽高,保存指定的宽高 * 常用方法 */ @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); Log.e("111","onMeasure(int widthMeasureSpec, int heightMeasureSpec)"); } /** * 指定孩子视图的位置 * 一般在ViewGroup中重写,因为view没有孩子 * 常用方法 */ @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { super.onLayout(changed, left, top, right, bottom); Log.e("111","onLayout(boolean changed, int left, int top, int right, int bottom)"); } /** * 绘制 * 一般在View中重写 */ @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Log.e("111","onDraw(Canvas canvas)"); } /** * 一般直接调用,不会重写 * 强制重绘,在主线程调用 * 会调用onDraw(canvas) * 常用方法 */ @Override public void invalidate() { super.invalidate(); Log.e("111","invalidate()"); } /** * 一般直接调用,不会重写 * 强制重绘 * 在主线程子线程都能调用 * 会调用onDraw(canvas) */ @Override public void postInvalidate() { super.postInvalidate(); Log.e("111","postInvalidate()"); } /** * 事件处理 * 一般用接口回调出去 */ @Override public boolean onTouchEvent(MotionEvent event) { Log.e("111","onTouchEvent(event)"); return super.onTouchEvent(event); } /** * 和window对象断开关系 * 视图死亡(视图被移除,或者activity死亡之前)时调用 */ @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); Log.e("111","onDetachedFromWindow"); }}
activity_main.xml<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.zhh.myview.MainActivity"> <com.zhh.myview.MyTextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="测试" /></RelativeLayout>
总结一、view的生命周期中常用方法
1构造方法
2测量onMeasure(int widthMeasureSpec, int heightMeasureSpec)
得到当前视图的宽高,保存指定的宽高
3位置onLayout(boolean changed, int left, int top, int right, int bottom)
指定孩子视图的位置
一般在ViewGroup中重写,因为view没有孩子
4绘制onDraw(Canvas canvas)
一般在View中重写,ViewGroup中不重写
二、常用调用的方法
强制绘制invalidate()
只能在主线程调用会调用,会调用onDraw(Canvas canvas)方法的执行
强制绘制postInvalidate()
在主线程子线程都能调用,会调用onDraw(Canvas canvas)方法的执行
三、事件处理
重写onTouchEvent(MotionEvent event)方法,用借口回调出去处理
关于事件分发机制参看
http://blog.csdn.net/zhaihaohao1/article/details/78338270
参考视频:
http://www.gulixueyuan.com/course/112/learn#lesson/1748
源码下载:
http://download.csdn.net/download/zhaihaohao1/10113421
阅读全文
0 0
- Android自定义控件基础知识----View的生命周期
- Android自定义view生命周期
- Android自定义view生命周期
- Android自定义View生命周期
- Android自定义View的生命周期浅析
- android 自定义view基础知识
- android 自定义view基础知识
- 自定义View的生命周期
- 自定义View的基础知识
- Android自定义View控件
- Android自定义View控件
- Android自定义View控件
- Android自定义View控件
- Android自定义View控件
- Android view 自定义控件
- Android 自定义控件-View
- Android自定义view之基础知识
- Android自定义控件View的探讨
- 英特尔结盟AMD反击英伟达,谁才是未来芯片之王?
- 谷歌、中科大27位作者Nature联名发文,指马斯克脑机接口易遭入侵
- 营销观察 | 怎么包装企业故事?马化腾让你去他办公室瞧一瞧
- disconf回调
- task1总结
- Android自定义控件基础知识----View的生命周期
- java json总结 读取json文件或者把对象写入到json文件里面
- 如何使检索出来的columns中的值唯一
- selinux
- 设计模式--工厂模式
- 十月十日JavaScript基础3
- Python的hasattr() getattr() setattr() 函数使用方法详解
- Longest Increasing Subsequence
- Extjs grid 合并行