導航:首頁 > 操作系統 > 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界面重繪相關的資料

熱點內容
freebsdnginxphp 瀏覽:215
雜訊消除演算法 瀏覽:607
vue類似電腦文件夾展示 瀏覽:111
後備伺服器有什麼功效 瀏覽:268
連不上伺服器怎麼連 瀏覽:600
什麼構架的可以刷安卓系統 瀏覽:771
愛奇藝APP怎麼兌換CDK 瀏覽:994
程序員買4k顯示器還是2k顯示器 瀏覽:144
python多進程怎麼多窗口 瀏覽:818
電腦文件夾怎麼取消類別 瀏覽:47
cad拉線段命令 瀏覽:924
如何用電腦清理手機沒用的文件夾 瀏覽:100
儲存層次結構對程序員的意義 瀏覽:477
微信文件夾查看器 瀏覽:952
android視頻聊天開源 瀏覽:552
思科iso命令 瀏覽:944
手機網頁源碼里的視頻地址 瀏覽:681
哈利波特魔法覺醒要怎麼選伺服器 瀏覽:993
情感交友網站php 瀏覽:942
id下載不了app怎麼回事 瀏覽:996