导航:首页 > 操作系统 > 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界面重绘相关的资料

热点内容
哈利波特魔法觉醒要怎么选服务器 浏览:993
情感交友网站php 浏览:941
id下载不了app怎么回事 浏览:995
有什么好看的服务器小说 浏览:293
程序员四级没过有什么影响 浏览:540
单片机与触摸屏连接 浏览:853
进程序员公司能穿凉鞋吗 浏览:245
PDF框大小 浏览:84
单片机产生锯齿波 浏览:225
如何修改ie代理服务器 浏览:417
折纸手工解压玩具不用a4纸 浏览:485
怎么双向传输服务器 浏览:286
电脑如何实现跨网段访问服务器 浏览:549
模块化网页源码字节跳动 浏览:486
梯度下降算法中遇到的问题 浏览:607
服务器连接电视怎么接 浏览:323
phploop语句 浏览:502
交叉编译工具链里的库在哪 浏览:782
安卓手q换号怎么改绑 浏览:399
nba球星加密货币 浏览:789