android自定義view的重新整理

2021-06-20 22:15:21 字數 3139 閱讀 1272

postinvalidate() ,invalidate() 區別

postinvalidate() 用在子執行緒向ui執行緒傳送介面重新整理訊息請求,

invalidate()呼叫直接在ui執行緒重新整理介面。

第1種情況 postinvalidate();

package com.ganstyle.activity;

import android.r;

import android.content.context;

import android.graphics.bitmap;

import android.graphics.bitmapfactory;

import android.graphics.canvas;

import android.graphics.color;

import android.graphics.matrix;

import android.graphics.paint;

import android.graphics.paint.style;

import android.util.log;

import android.view.keyevent;

import android.view.motionevent;

import android.view.view;

import android.widget.switch;

public class gameview  extends view

@override

protected void ondraw(canvas canvas)

mythread t=null;

@override

public boolean onkeydown(int keycode, keyevent event)   執行這個方法不會在主線程重繪,因為onkeydown 在主線執行,

//由於迴圈時間過長,主線不會進重繪,所以要另乙個執行緒 mythread  t 執行緒執行迴圈,

switch (keycode)system.out.println("gameview "+ keycode ); 

//設定返回鍵生效 

case  keyevent.keycode_back:

return super.onkeydown(keycode, event); 

default :

break;}//

return super.onkeydown(keycode, event); 

return true; //設定為true,表示不向下面的元件或view傳遞

}@override

public boolean ontouchevent(motionevent event)

private class mythread extends thread catch (interruptedexception e)

log.i("mythread", string.valueof(thread.currentthread().getid()));

gameview.this.postinvalidate();}}}

}第2種情況 invalidate(); 根據handler 收到的訊息,對介面進行重繪

package com.ganstyle.activity;

import android.content.context;

import android.graphics.canvas;

import android.graphics.color;

import android.graphics.paint;

import android.graphics.paint.style;

import android.os.handler;

import android.os.message;

import android.util.log;

import android.view.keyevent;

import android.view.motionevent;

import android.view.view;

public class handlegameview extends view

log.i("handler", string.valueof(thread.currentthread().getid()));

}

};public handlegameview(context context)

@override

protected void ondraw(canvas canvas)

mythread t=null;

@override

public boolean onkeydown(int keycode, keyevent event)      執行這個不會在主線程重繪

switch (keycode)system.out.println("gameview "+ keycode ); 

//設定 返回鍵 生效 

case  keyevent.keycode_back:

return super.onkeydown(keycode, event); 

default :

break;

}//return super.onkeydown(keycode, event); 

return true; //設定為true,表示不向下面的元件或view傳遞

}@override

public boolean ontouchevent(motionevent event)

private class mythread extends thread catch (interruptedexception e)

log.i("mythread", string.valueof(thread.currentthread().getid()));

message message = new message();

message.what = 1;

handler.sendmessage(message);}}}

}

Android自定義View 自定義元件

自繪控制項也分兩種,自定義元件和自定義容器,自定義元件是繼承view類,自定義容器時繼承viewgrounp 今天主要分析下自定義元件 還是舉個例子來的實際些,假如我們要畫乙個最簡單的textview,首先想到的就是canvas.drawtext 方法,怎麼畫了?還是得一步一步來 1 寫乙個myte...

Android自定義View 一 View的測量

想要讓系統繪製出你所需要的圖形,就必須告訴系統view的大小,所以,在繪製view時,先實現view的onmesure 方法。在測量view之前,要先了解measurespec這個類,measurespec物件中包含了測量的模式和測量的大小 measurespec.exactly 精確模式 當我們將...

Android自定義View實現

android自定義view實現很簡單 繼承view或者其子類,重寫建構函式 ondraw,onmeasure 等函式,根據繼承的類的不同可能有所不同。如果自定義的view需要有自定義的屬性,需要在values下建立attrs.xml。在其中定義你的屬性。在使用到自定義view的xml布局檔案中需要...