Android之自定义View
16lz
2021-12-04
package com.example.myview;import android.content.Context;import android.graphics.Canvas;import android.util.Log;import android.view.KeyEvent;import android.view.MotionEvent;import android.view.View;/** * 当开发者需要开发自定义View时,首先定义一个继承View基类的子类,然后重写View类的一个或多个方法,下面的类列出了通常可以被用户重写的方法 * 重写构造器是定制View的最基本方式,当java代码创建一个View实例,或者根据XML布局文件加载并构造界面时将需要调用该方法 */public class MyView extends View {public static final String TAG = "MyView"; public MyView(Context context) {super(context);}/** * 这是一个回调方法,当应从XML布局文件加载该组件并利用它来构建界面之后,该方法将会被回调 */@Overrideprotected void onFinishInflate() {super.onFinishInflate();Log.d(TAG, ">>>>>>>调用onFinishInflate()方法");}/** * 调用该方法来检测View组件及它所包含的所有子组件的大小 */@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);Log.d(TAG, ">>>>>>>调用onMeasure(int,int)方法");}/** * 当该组件需要分配其子组件的位置、大小时,该方法就会被回调 */@Overrideprotected void onLayout(boolean changed, int left, int top, int right,int bottom) {super.onLayout(changed, left, top, right, bottom);Log.d(TAG, ">>>>>>>调用onLayout(boolean,int,int,int,int)方法");}/** * 当该组件的大小被改变时回调该方法 */@Overrideprotected void onSizeChanged(int w, int h, int oldw, int oldh) {super.onSizeChanged(w, h, oldw, oldh);Log.d(TAG, ">>>>>>>调用onSizeChanged(int,int,int,int)方法");}/** * 当该组件将要绘制它的内容时回调该方法进行绘制 */@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);Log.d(TAG, ">>>>>>>调用onDraw(Canvas)方法");}/** * 当某个键被按下时触发该方法 */@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {Log.d(TAG, ">>>>>>>调用onKeyDown(int,KeyEvent)方法");return super.onKeyDown(keyCode, event);}/** * 当松开某个键时触发该方法 */@Overridepublic boolean onKeyUp(int keyCode, KeyEvent event) {Log.d(TAG, ">>>>>>>调用onKeyUp(int,KeyEvent)方法");return super.onKeyUp(keyCode, event);}/** * 当发生轨迹球事件时触发该方法 */@Overridepublic boolean onTrackballEvent(MotionEvent event) {Log.d(TAG, ">>>>>>>调用onTrackballEvent(MotionEvent)方法");return super.onTrackballEvent(event);}/** * 当发生轨触摸屏事件时触发该方法 */@Overridepublic boolean onTouchEvent(MotionEvent event) {Log.d(TAG, ">>>>>>>调用onTouchEvent(MotionEvent)方法");return super.onTouchEvent(event);}/** * 当该组件得到、失去焦点时触发该方法 */@Overridepublic void onWindowFocusChanged(boolean hasWindowFocus) {Log.d(TAG, ">>>>>>>调用onWindowFocusChanged(boolean)方法");super.onWindowFocusChanged(hasWindowFocus);}/** * 当把该组件放入某个窗口时触发该方法 */@Overrideprotected void onAttachedToWindow() {super.onAttachedToWindow();Log.d(TAG, ">>>>>>>调用onAttachedToWindow()方法");}/** * 当把该组件从某个窗口上分离时触发该方法 */@Overrideprotected void onDetachedFromWindow() {super.onDetachedFromWindow();Log.d(TAG, ">>>>>>>调用onDetachedFromWindow()方法");}/** * 当包含该组件的窗口的可见性发生改变时触发该方法 */@Overrideprotected void onWindowVisibilityChanged(int visibility) {super.onWindowVisibilityChanged(visibility);Log.d(TAG, ">>>>>>>调用onWindowVisibilityChanged(int)方法");}}
/** * 当组件通过XML被加载的时候,会调用这个构造方法进行实例化 * 如果通过XML加载时 需要添加这个构造方法 否则会android.view.inflateexception异常 * @param context * @param atts */public MyView(Context context,AttributeSet atts){super(context,atts);}
更多相关文章
- android关于getLayoutParams()方法源码译文(部分)
- Android--DatePickerDialog日期控件
- Android--第一行代码笔记(2)
- android studio 编译的时候出现的错误和解决方法
- Android重要控件概览(中)
- Android启动过程
- 关于android的广播机制里面的网络状态监听 (Fragment实现)
- Hive中的case when 的写法
- Android(安卓)Button字母自动全部大写的问题