关闭

View

标签: androidui
47人阅读 评论(0) 收藏 举报
分类:

  View 类是Android的一个超类, 所有的 UI 控件都继承 View 类, 每个View的都有一个用于绘制的画布

View的常用方法


    /**
     * 从XML中加载完成并构建界面后回调
     */
    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
    }

    /**
     * 测量 View 组件及其所包含所有子组件的大小
     * 重写该方法的主要目的是为了大小为 wrap_content 时,可以确定控件的大小
     */
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(measureWidth(widthMeasureSpec), heightMeasureSpec);
    }

    /**
     * 测量宽度
     * @param widthMeasureSpec
     * @return
     */
   private int measureWidth(int widthMeasureSpec) {
        int result = 200;       // 默认宽度
        int specMode = MeasureSpec.getMode(widthMeasureSpec);  // 获取测量模式
        int specSize = MeasureSpec.getSize(widthMeasureSpec);  // 获取大小

        switch (specMode) {
            case MeasureSpec.EXACTLY :        // 精确模式(layout_width="100dp" 或 match_parent)
                result = specSize;
            break;

            case MeasureSpec.AT_MOST :        // 最大值模式(wrap_content)
                result = Math.min(result, specSize);    // 返回两个 int 值中较小的一个, 保证不会超出父控件
                break;

            case MeasureSpec.UNSPECIFIED :    // 无限制模式,它可以是任何大小

                break;
        }
        return result;
    }



    /**
     * 分配其子组件的位置、大小时回调方法
     */
    @Override
    protected void onLayout(boolean changed, int left, int top, int right,int bottom) {
        super.onLayout(changed, left, top, right, bottom);
    }

    /**
     * 当前组件的大小发生变化时回调
     */
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
    }

    /**
     * 绘制其内容时回调该方法进行绘制
     */
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
    }

    /**
     * 某个按键按下时触发
     */
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        return super.onKeyDown(keyCode, event);
    }

    /**
     * 松开某个按键时触发
     */
    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        return super.onKeyUp(keyCode, event);
    }

    /**
     * 发生轨迹球事件时触发
     */
    @Override
    public boolean onTrackballEvent(MotionEvent event) {
        return super.onTrackballEvent(event);
    }

    /**
     * 触摸屏幕时触发
     */
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return super.onTouchEvent(event);
    }

    /**
     * 得到、失去焦点时触发该方法
     */
    @Override
    public void onWindowFocusChanged(boolean hasWindowFocus) {
        super.onWindowFocusChanged(hasWindowFocus);
    }

    /**
     * 将该组件添加到某个窗口时触发
     */
    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
    }

    /**
     * 将该组件从某个窗口上分离时触发该方法
     */
    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
    }

    /**
     * 包含该组件的窗口的可见性发生改变时触发
     */
    @Override
    protected void onWindowVisibilityChanged(int visibility) {
        super.onWindowVisibilityChanged(visibility);
    }

    // 在线程中通知
    invalidate();                   // 刷新整个View
    invalidate(Rect);               // 刷新一个矩形区域
    invalidate(l, t, r, b);      
    invalidateDrawable(drawable);   // 只刷新指定的drawable
    postInvalidate();               // 子线程中刷新UI
    postInvalidateDelayed(long delayMilliseconds)  // 指定间隔时间刷新

    getLeft();       // x 轴起始坐标
    getTop();        // y 轴起始坐标
    getRight();      // x 轴起始坐标  + getWidth()
    getBottom();     // y 轴起始坐标  + getHeight()

    getPaddingLeft();
    setPadding(left, top, right, bottom);


    // 获取绘制的宽度和高度
    getWidth();
    getHeight();

    // 获取父节点测量的宽度和高度
    getMeasuredWidth();
    getMeasuredHeight();
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:153次
    • 积分:22
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:0篇
    • 译文:2篇
    • 评论:0条
    文章分类
    文章存档