Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android自定義控件(六)自定義ImageView動態設置ImageView的高度

android自定義控件(六)自定義ImageView動態設置ImageView的高度

編輯:關於Android編程

我們經常會遇到動態設置ImageView的高度的情況,今天給大家分享下怎麼使用自定義ImageView去動態設置ImageView的高度

1.自定義ImageView動態設置ImageView的高度(高度比以自定義屬性方式給出)

package com.example.imageview.ui.view;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ImageView;

/**
 * 功能:能夠根據一個指定的寬高比(ratio)和自己的寬度,動態設置自己的高度
 * @author smartbetter
 *
 */
public class RatioImageView extends ImageView{
	private float ratio = 0f;//寬高比
	public RatioImageView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
	}

	public RatioImageView(Context context, AttributeSet attrs) {
		super(context, attrs);
		//獲取自定義屬性的值,賦值ratio
		ratio = attrs.getAttributeFloatValue("http://schemas.android.com/apk/res/com.example.imageview"
				, "ratio", 0f);
	}

	public RatioImageView(Context context) {
		super(context);
	}

	/**
	 * 設置ImageView的寬高比
	 * @param ratio
	 */
	public void setRatio(float ratio){
		this.ratio = ratio;
	}
	
	/**
	 * onMeasure是measure方法引起的回調,而measure方法是父VIew在測量子View會調用子的View的measure方法
	 * 所以widthMeasureSpec(寬度測量規則)和heightMeasureSpec(高度測量規則)是父VIew在調用子View的measure方法時計算好的
	 * MeasureSpec: 測量規則類,由size和mode2個因素組成:
	 *   size: 就是指定的大小值
	 *   mode: MeasureSpec.AT_MOST : 對應的是warp_content;
	 *         MeasureSpec.EXACTLY : 對應的是具體的dp值,match_parent
	 *         MeasureSpec.UNSPECIFIED: 未定義的,一般用adapter的view的測量中
	 */
	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		//1.從widthMeasureSpec中反向獲取父VIew計算好的size
		int width = MeasureSpec.getSize(widthMeasureSpec);
//		LogUtil.e(this, "width: "+width);
		//2.根據寬高比和width,計算出對應的height
		if(ratio!=0){
			float height = width/ratio;
			//3.重新組建heightMeasureSpec,傳遞給super.onMeasure
			heightMeasureSpec = MeasureSpec.makeMeasureSpec((int) height,MeasureSpec.EXACTLY);
		}
		
		super.onMeasure(widthMeasureSpec, heightMeasureSpec);
	}
}

2.給自定義ImageView增加自定義屬性

自定義屬性在“android自定義控件(一) 自定義組合控件”中已經使用過,在此順便復習下

(1)在\res\values\attrs.xml中聲明自定義屬性

 



    
    
    
         
    
    

(2)在布局文件\res\layout\activity_main.xml中使用

首先聲明命名空間

 


 

然後就可以使用自定義屬性了




    
    

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved