導航:首頁 > 操作系統 > android界面重繪

android界面重繪

發布時間:2022-08-12 09:25:31

A. android中怎麼讓fragment重新載入繪制界面

重新掉用一次ocreatview回調方法,或者每次載入fragment使用replace方法,這樣每次都會重新載入繪制界面

B. android 自定義View 怎麼重繪

修改顏色後調用invalidate()
在自定義View 中提供一個方法
public void setRectColor(int color){
colors[x][x] = color; //修改顏色

invalidate();
}

C. android 界面中,點擊一張圖片,怎樣使得界面上這張圖片切換為另一張圖片。

即使樓主沒有用layout的xml文件。但還是要聲明實例化一個View去展示畫布,以及在Activity的setContentView(view)方法中傳入。 這樣,樓主是肯定可以得到這個View的對象的。
方法一:直接添加OnclickListener
view.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// 在這里切換另一張圖片
}
});
方法二:自定義一個view.繼承android.view.View.並復寫View的onTouchEvent()方法。
@Override
public boolean onTouchEvent(MotionEvent event)
{
//獲取拖動事件的發生位置
float x = event.getX();
float y = event.getY();
switch (event.getAction())
{
case MotionEvent.ACTION_DOWN:

break;
case MotionEvent.ACTION_MOVE:

break;
case MotionEvent.ACTION_UP:

break;
}
invalidate();// 申請重繪
return true;
}
@Override
public void onDraw(Canvas canvas)
{
//.....你要繪制的另一張圖片
canvas.drawPath(path, paint);
}

D. Android 如何判斷一個View重繪或載入完成

1、view重繪時回調(即監聽函數,當view重繪完成自動動用,需要向view的觀察者添加監聽器)。格式:

view.getViewTreeObserver().addOnDrawListener(new OnDrawListener() {

@Override

public void onDraw() {

// TODO Auto-generated method stub

}

});

2、view載入完成時回調(當view載入完成自動動用,需要向view的觀察者添加監聽器)。格式:

view.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

@Override

public void onGlobalLayout() {

// TODO Auto-generated method stub

}

});

(4)android界面重繪擴展閱讀:

兩種方式刷新:

1、主線程可以直接調用Invalidate()方法刷新

2、子線程可以直接調用postInvalidate()方法刷新。

API的描述 : Invalidatethe whole view. If the view is visible, onDraw(Canvas) will be called at somepoint in the future. This must be called from a UI thread. To call from anon-UI thread, call postInvalidate().。

API的描述譯文:當Invalidate()被調用的時候,View的OnDraw()就會被調用,Invalidate()必須是在UI線程中被調用,如果在新線程中更新視圖的就調用postInvalidate()。

E. android 哪些函數會引起界面重新測量

橫屏和豎屏
、新建一個Activity,並把各個生命周期列印出來

2、運行Activity,得到如下信息

onCreate-->
onStart-->
onResume-->

3、按crtl+f12切換成橫屏時

onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->

4、再按crtl+f12切換成豎屏時,發現列印了兩次相同的log

onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->
onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->

5、修改AndroidManifest.xml,把該Activity添加 android:configChanges="orientation",執行步驟3

onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->

6、再執行步驟4,發現不會再列印相同信息,但多列印了一行onConfigChanged

onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->
onConfigurationChanged-->

7、把步驟5的android:configChanges="orientation" 改成 android:configChanges="orientation|keyboardHidden",執行步驟3,就只列印onConfigChanged

onConfigurationChanged-->

8、執行步驟4

onConfigurationChanged-->
onConfigurationChanged-->

總結:

1、不設置Activity的android:configChanges時,切屏會重新調用各個生命周期,切橫屏時會執行一次,切豎屏時會執行兩次

2、設置Activity的android:configChanges="orientation"時,切屏還是會重新調用各個生命周期,切橫、豎屏時只會執行一次

3、設置Activity的android:configChanges="orientation|keyboardHidden"時,切屏不會重新調用各個生命周期,只會執行onConfigurationChanged方法

總結一下整個Activity的生命周期

補充一點,當前Activity產生事件彈出Toast和AlertDialog的時候Activity的生命周期不會有改變

Activity運行時按下HOME鍵(跟被完全覆蓋是一樣的):onSaveInstanceState --> onPause --> onStop onRestart -->onStart--->onResume

Activity未被完全覆蓋只是失去焦點:onPause--->onResume

F. android自定義 view組件重繪問題

new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.post(new Runnable() {
public void run() {
onDraw(null);
invalidate();
}

});
}
}).start();
新線程實現了runnable介面但是 裡面的 第一個 run 方法只執行一次就退出了。應該加入循環不斷更新。而hander.post 里的那個runnable 外層每循環一次就post一次 所以不用加入循環語句。

boolean flag=true;
new Thread(new runnable{
public void run(){
try{
while(flag){
Thread.sleep(1);
handler.post(new Runnable() {
public void run() {
onDraw(null);
invalidate();
}
});
}catch (InterruptedException e) {
e.printStackTrace();
flag=flase;
}
}
}).start();

G. android canvas view重繪 我在一個activity中調用了canvas。在canvas中我點擊事件需要重新繪制當前view

除了SurfaceView,其它的都必須通過調用View.invalidate方法刷新View
所以不能直接執行moren(canvas),需要在onTouchEvent調用invalidate

H. 如何讓fragment的view重繪

可以在fragment中調用父Activity的recreate()方法重繪父Activity,這樣fragment也會被重繪。

代碼如下:

java">getActivity().recreate();

I. Android 布局重繪

你add之後調用,linearlayout.getChildAt(linearlayout.getChildCount()-1).getLeft();不得么。你的textview可能和linearlayout.getChildAt(linearlayout.getChildCount()-1)不是同一個對象。

閱讀全文

與android界面重繪相關的資料

熱點內容
網頁怎麼運行python腳本 瀏覽:465
單片機如何程序延時 瀏覽:908
程序員短視頻興趣愛好調查 瀏覽:875
雲伺服器和主機售價 瀏覽:158
pdf收藏 瀏覽:777
pythonflaskurlfor 瀏覽:262
蘋果手機怎麼把移出的app移出來 瀏覽:728
單片機縮略詞 瀏覽:714
java實現冒泡排序演算法 瀏覽:21
php地圖坐標 瀏覽:106
蜜蜂采蜜導航演算法 瀏覽:359
python空格自動補齊 瀏覽:42
批量快捷文件夾 瀏覽:447
圖片pdf清晰 瀏覽:616
安卓系統gz文件如何解壓 瀏覽:51
車e估app怎麼注冊 瀏覽:75
什麼樣的電腦能作為伺服器 瀏覽:640
win許可權命令提示符 瀏覽:683
qd30壓縮機怎樣檢測好壞 瀏覽:6
蘋果app驗證失敗怎麼辦 瀏覽:68