android asynctask-android 自定义控件 onMeasure

问题描述

android 自定义控件 onMeasure

android 自定义控件SurfaceView

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int originalWidth = MeasureSpec.getSize(widthMeasureSpec);//800
int calculatedHeight = originalWidth * aspectHeight / aspectWidth;//1095
super.onMeasure(
MeasureSpec.makeMeasureSpec(originalWidth, MeasureSpec.EXACTLY),
MeasureSpec.makeMeasureSpec(calculatedHeight, MeasureSpec.EXACTLY));
}

    对onMeasure方法表示不理解,
    上述代码中的originalWidth,calculatedHeight,是指控件本身还是真个屏幕?通过debug,发现打印出来的值都对不上啊?

     <view
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    class="com.sensetime.facesign.util.DefinedSurfaceView"
    android:id="@+id/surfaceView"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true" />

    package com.sensetime.facesign.util;

import android.content.Context;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.SurfaceView;

import com.sensetime.facesign.R;

/**

  • Created by SenseTime on 2015/1/10.
    */
    public class DefinedSurfaceView extends SurfaceView {

    private int aspectWidth = 480;
    private int aspectHeight = 640;
    private Context mContext;

    public DefinedSurfaceView(Context context) {
    super(context);
    mContext = context;
    }

    public DefinedSurfaceView(Context context, AttributeSet attrs) {
    super(context, attrs);
    mContext = context;
    setCustomAttributes(attrs);
    }

    public DefinedSurfaceView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    mContext = context;
    setCustomAttributes(attrs);
    }

    private void setCustomAttributes(AttributeSet attrs) {
    TypedArray a = mContext.obtainStyledAttributes(attrs,
    R.styleable.definedlayout);
    aspectWidth = a.getDimensionPixelSize(
    R.styleable.definedlayout_target_width, 480);//aspectWidth == 480 //??
    aspectHeight = a.getDimensionPixelSize(
    R.styleable.definedlayout_target_height, 640);//aspectHeight == 640 //??

    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int originalWidth = MeasureSpec.getSize(widthMeasureSpec);//800
    int calculatedHeight = originalWidth * aspectHeight / aspectWidth;//1095
    super.onMeasure(
    MeasureSpec.makeMeasureSpec(originalWidth, MeasureSpec.EXACTLY),
    MeasureSpec.makeMeasureSpec(calculatedHeight, MeasureSpec.EXACTLY));
    }
    }

解决方案

Android 自定义控件onMeasure()方法详解
自定义控件---onMeasure和onLayout

解决方案二:

 如果是SurfaceView,则不能根据 onMeasure获取高宽
需要用
SurfaceHolder.Callback的surfaceCreated才能获取实际的高度和宽度
public void surfaceCreated(SurfaceHolder holder) {
  // TODO Auto-generated method stub
Log.d("TEST","Width="+ this.getWidth()+"|Height="+this.getHeight());

 }

 view可以用onMeasure
时间: 2024-10-21 16:42:25

android asynctask-android 自定义控件 onMeasure的相关文章

Android开发进阶自定义控件之滑动开关实现方法【附demo源码下载】_Android

本文实例讲述了Android开发进阶自定义控件之滑动开关实现方法.分享给大家供大家参考,具体如下: 自定义开关控件 Android自定义控件一般有三种方式 1.继承Android固有的控件,在Android原生控件的基础上,进行添加功能和逻辑. 2.继承ViewGroup,这类自定义控件是可以往自己的布局里面添加其他的子控件的. 3.继承View,这类自定义控件没有跟原生的控件有太多的相似的地方,也不需要在自己的肚子里添加其他的子控件. ToggleView自定义开关控件表征上没有跟Androi

Android开发之自定义控件用法详解_Android

本文实例讲述了Android开发之自定义控件用法.分享给大家供大家参考,具体如下: 今天和大家分享下组合控件的使用.很多时候android自定义控件并不能满足需求,如何做呢?很多方法,可以自己绘制一个,可以通过继承基础控件来重写某些环节,当然也可以将控件组合成一个新控件,这也是最方便的一个方法.今天就来介绍下如何使用组合控件,将通过两个实例来介绍. 第一个实现一个带图片和文字的按钮,如图所示: 整个过程可以分四步走.第一步,定义一个layout,实现按钮内部的布局.代码如下: custom_bu

Android AsyncTask实现机制详细介绍及实例代码_Android

Android AsyncTask实现机制 示例代码: public final AsyncTask<Params, Progress, Result> execute(Params... params) { return executeOnExecutor(sDefaultExecutor, params); } public final AsyncTask<Params, Progress, Result> executeOnExecutor(Executor exec, Pa

Android AsyncTask完全解析 带你从源码的角度彻底理解_Android

我们都知道,Android UI是线程不安全的,如果想要在子线程里进行UI操作,就需要借助Android的异步消息处理机制.之前我也写过了一篇文章从源码层面分析了Android的异步消息处理机制. 不过为了更加方便我们在子线程中更新UI元素,Android从1.5版本就引入了一个AsyncTask类,使用它就可以非常灵活方便地从子线程切换到UI线程,我们本篇文章的主角也就正是它了. AsyncTask很早就出现在Android的API里了,所以我相信大多数朋友对它的用法都已经非常熟悉.不过今天我

Android AsyncTask源码分析_Android

Android中只能在主线程中进行UI操作,如果是其它子线程,需要借助异步消息处理机制Handler.除此之外,还有个非常方便的AsyncTask类,这个类内部封装了Handler和线程池.本文先简要介绍AsyncTask的用法,然后分析具体实现. 基本用法AsyncTask是一个抽象类,我们需要创建子类去继承它,并且重写一些方法.AsyncTask接受三个泛型参数: Params: 指定传给任务执行时的参数的类型 Progress: 指定后台任务执行时将任务进度返回给UI线程的参数类型 Res

android AsyncTask后面的泛型中三个类型参数是什么意思?顺序可以变么?

问题描述 android AsyncTask后面的泛型中三个类型参数是什么意思?顺序可以变么? android AsyncTask后面的泛型中三个类型参数是什么意思?顺序可以变么? 解决方案 根據做過的Project,顺序不可以变 解决方案二: 必须不可以,分别是传入参数类型,中间参数类型和传出参数的类型

浅析Android手机卫士自定义控件的属性_Android

推荐阅读:浅析Android手机卫士关闭自动更新 上一节完成的自定义组合控件,灵活性不够,控件的显示信息上,仿照系统属性,自定义自己的属性 上一节组合控件SettingItemView中有三个控件,分别是TextView大标题,TextView描述,CheckBox复选框 自定义属性 tsh:title="大标题" 和tsh:desc_on="小标题开启",tsh:desc_off="小标题关闭" 添加命名空间,xmlns:tsh="h

浅析Android手机卫士自定义控件的属性

推荐阅读:浅析Android手机卫士关闭自动更新 上一节完成的自定义组合控件,灵活性不够,控件的显示信息上,仿照系统属性,自定义自己的属性 上一节组合控件SettingItemView中有三个控件,分别是TextView大标题,TextView描述,CheckBox复选框 自定义属性 tsh:title="大标题" 和tsh:desc_on="小标题开启",tsh:desc_off="小标题关闭" 添加命名空间,xmlns:tsh="h

Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池

前言:由于最近在做SDK的功能,需要设计线程池.看了很多资料不知道从何开始着手,突然发现了AsyncTask有对线程池的封装,so,就拿它开刀,本文将从AsyncTask的基本用法,到简单的封装,再到任务队列分析,最后自定义线程池.   1.概念     Android 中的异步任务常用的一种方式是:Handler + Thread 组合来实现的.Thread 负责子线程的耗时操作,Handler 负责线程间的通信,用的最多的当属子线程和主线程通信.     Android 为了简化操作,提供了