1. 程式人生 > >Android GUI之View測量

Android GUI之View測量

    public static int getChildMeasureSpec(int spec, int padding, int childDimension) {
        int specMode = MeasureSpec.getMode(spec);
        int specSize = MeasureSpec.getSize(spec);

        int size = Math.max(0, specSize - padding);

        int resultSize = 0;
        int resultMode = 0;

        
switch (specMode) { // Parent has imposed an exact size on us case MeasureSpec.EXACTLY: if (childDimension >= 0) { resultSize = childDimension; resultMode = MeasureSpec.EXACTLY; } else if (childDimension == LayoutParams.MATCH_PARENT) {
// Child wants to be our size. So be it. resultSize = size; resultMode = MeasureSpec.EXACTLY; } else if (childDimension == LayoutParams.WRAP_CONTENT) { // Child wants to determine its own size. It can't be // bigger than us. resultSize = size; resultMode
= MeasureSpec.AT_MOST; } break; // Parent has imposed a maximum size on us case MeasureSpec.AT_MOST: if (childDimension >= 0) { // Child wants a specific size... so be it resultSize = childDimension; resultMode = MeasureSpec.EXACTLY; } else if (childDimension == LayoutParams.MATCH_PARENT) { // Child wants to be our size, but our size is not fixed. // Constrain child to not be bigger than us. resultSize = size; resultMode = MeasureSpec.AT_MOST; } else if (childDimension == LayoutParams.WRAP_CONTENT) { // Child wants to determine its own size. It can't be // bigger than us. resultSize = size; resultMode = MeasureSpec.AT_MOST; } break; // Parent asked to see how big we want to be case MeasureSpec.UNSPECIFIED: if (childDimension >= 0) { // Child wants a specific size... let him have it resultSize = childDimension; resultMode = MeasureSpec.EXACTLY; } else if (childDimension == LayoutParams.MATCH_PARENT) { // Child wants to be our size... find out how big it should // be resultSize = 0; resultMode = MeasureSpec.UNSPECIFIED; } else if (childDimension == LayoutParams.WRAP_CONTENT) { // Child wants to determine its own size.... find out how // big it should be resultSize = 0; resultMode = MeasureSpec.UNSPECIFIED; } break; } return MeasureSpec.makeMeasureSpec(resultSize, resultMode); }

相關推薦

Android GUIView測量

public static int getChildMeasureSpec(int spec, int padding, int childDimension) { int specMode = MeasureSpec.getMode(spec); int sp

Android GUIView繪製流程

private void performLayout(WindowManager.LayoutParams lp, int desiredWindowWidth, int desiredWindowHeight) { mLayoutRequested =

Android GUIActivity、Window、View

public class Activity extends ContextThemeWrapper implements LayoutInflater.Factory2, Window.Callback, KeyEvent.Callback, OnCr

Android探究View的繪制流程

off ice 父類 ati cti break gravity android face Android中Activity是作為應用程序的載體存在,代表著一個完整的用戶界面,提供了一個窗口來繪制各種視圖,當Activity啟動時,我們會通過setContentView方法

Android探究View的繪製流程

Android中Activity是作為應用程式的載體存在,代表著一個完整的使用者介面,提供了一個視窗來繪製各種檢視,當Activity啟動時,我們會通過setContentView方法來設定一個內容檢視,這個內容檢視就是使用者看到的介面。 PhoneWindow是Android系統中最基本的視窗系統,每個Ac

Android動畫View間漸變

前言 漸變動畫(也叫消失)通常指漸漸的淡出某個 UI 元件,同時同步地淡入另一個。在你 App 想切換內容或 view 的情況下,這種動畫很有用。漸變簡短不易察覺,它也能提供從一個介面到下一個之間流暢的轉換。但當你不使用它們時,轉換經常會感到生硬而倉促。 效

Android 開發 View.post() 的作用

1、在 onCreate() 方法中直接呼叫 view.getHeight() 會返回 0,但是可以在 view.post() 中獲取控制元件的寬高: view.post(new Runnable() { @Override

Android開發 view的幾種佈局方式及實踐

引言 通過前面兩篇: 我們對Android應用程式執行原理及佈局檔案可謂有了比較深刻的認識和理解,並且用“Hello World!”程式來實踐證明了。在繼續深入Android開發之旅之前,有必要解決前兩篇中沒有介紹的遺留問題:View的幾種佈局顯示方法,以後就不會在針對佈局方面做過多的介紹。View的佈局顯

android 自定義ViewView測量(onMeasure()方法)

       在自定義控制元件的過程中,系統在繪製View前,必須對View進行測量,已使後面的onLayout(設定View的放置位置)能夠順利進行。而對VIew的測量的過程則是在onMeasure()中進行的。可能這時有的同學就發現問題了,說,自己以前自定義的View沒

android自定義view測量view和迭代測量子view

@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int resWidth = 0; int resHeight = 0; int wi

android View

height 發生 sta per direct anti change screen cto 在進行遊戲開發時,需要自定義各種控件和界面。 自定義View的使用: 繪制屏幕 刷新屏幕:後臺數據發生了變化,需要開發人員自己刷新屏幕以顯示最新數據 例子: MyView開發

Android開發漫漫長途 番外篇——自定義View的各種姿勢2

是個 pub water 常用 getchild mod one 它的 sdn 該文章是一個系列文章,是本人在Android開發的漫漫長途上的一點感想和記錄,我會盡量按照先易後難的順序進行編寫該系列。該系列引用了《Android開發藝術探索》以及《深入理解Android 卷

Android面試收集錄12 View測量、布局及繪制原理

模糊 view繪制 params 可能 ec2 androi 流程 https images 一、View繪制的流程框架 View的繪制是從上往下一層層叠代下來的。DecorView-->ViewGroup(--->ViewGroup)-->V

[譯]Android view 測量布局和繪制的流程

註意 images draw can www -i str 中一 opengl-es 原文鏈接 創造優秀的用戶體驗是我們開發者的主要目標之一.為此, 我們首先要了解系統是如何工作的, 這樣我們才可以更好的與系統配合, 從它的優點中獲益, 規避它的缺陷.

Android自定義View分貝儀

一、說明        最近在整理自定義View方面的知識,偶爾看到meizu工具箱的分貝儀效果,感覺它的實效效果還挺好的,遂想自己模擬實現練練手,廢話不多說,直接開擼。 二、效果圖 首先看一下效果圖: 看效果還挺炫酷

android Gui系統SurfaceFlinger(5)---Vsync(2)

9.Vsync第二部分 在上一篇中我們講到,檢視的重新整理需要很多步驟, void SurfaceFlinger::handleMessageRefresh() { ATRACE_CALL(); preComposition();  //合成前的準備 rebui

android Gui系統SurfaceFlinger(4)---Vsync(1)

8.Vsync 回到頂部 8.1概論 VSYNC(Vertical Synchronization)是一個相當古老的概念,對於遊戲玩家,它有一個更加大名鼎鼎的中文名字—-垂直同步。 “垂直同步(vsync)”指的是顯示卡的輸出幀數和螢幕的垂直重新整理率相同,這完全是一個CRT顯示器上

android Gui系統SurfaceFlinger(3)---SurfaceFlinger

7.SurfaceFlinger SurfaceFlinger在前面的篇幅了,多有涉及。 SurfaceFlinger是GUI重新整理UI的核心,所以任何關於SurfaceFlinger的改進都會對android UI系統有重大影響。 SurfaceFlinger主要分為4個部分 1

android Gui系統SurfaceFlinger(2)---BufferQueue

6 BufferQueue 上一篇已經說到,BufferQueue是SurfaceFlinger管理和消費surface的中介,我們就開始分析bufferqueue。 每個應用 可以由幾個BufferQueue? 應用繪製UI 所需的記憶體從何而來? 應用和SurfaceFlinge

android Gui系統SurfaceFlinger(1)---SurfaceFlinger概論

  GUI 是任何系統都很重要的一塊。 android GUI大體分為4大塊。 1)SurfaceFlinger 2)WMS 3)View機制 4)InputMethod 這塊內容非常之多,但是理解後,可以觸類旁通,其實現在主流的系統,包括andorid,ios