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)不是同一個對象。