gpt4 book ai didi

java - 安卓java |更新 View 布局参数时出现卡顿和滞后

转载 作者:行者123 更新时间:2023-12-01 11:24:00 29 4
gpt4 key购买 nike

最近我正在制作一款需要连续动画的游戏。

我会进一步解释。

我有 View ,比如说屏幕顶部,我需要将其从屏幕顶部到屏幕底部设置动画,然后当 View 打开时它会返回到原始位置(屏幕顶部)在底部。

现在有 6 个 View 执行完全相同的操作。

从屏幕顶部到屏幕底部以及当它们位于底部时返回的动画。

但是当他们已经移动时,应用程序会出现非常烦人的卡顿和滞后。

代码如下:

@Override
public void onWindowFocusChanged(boolean focus) {
new LongOperation().execute();

}




private class LongOperation extends AsyncTask<String, Void, String> {

@Override
protected String doInBackground(String... params) {

play.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
if (!failedM) {
running = true;
soundPool.play(click_sound, 1, 1, 0, 0, 1);

play.setVisibility(View.INVISIBLE);


p1.setVisibility(View.VISIBLE);
p2.setVisibility(View.VISIBLE);
p3.setVisibility(View.VISIBLE);
c1.setVisibility(View.VISIBLE);
c2.setVisibility(View.VISIBLE);
c3.setVisibility(View.VISIBLE);


final Handler mHandler = new Handler();
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
try {
Thread.sleep(60);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mHandler.post(new Runnable() {

@Override
public void run() {


p1.getHitRect(rect1);

p2.getHitRect(rect2);

p3.getHitRect(rect3);

c1.getHitRect(rect4);

c2.getHitRect(rect5);

c3.getHitRect(rect6);
if (Rect.intersects(rect, rect1)
{
.....

}
if (Rect.intersects(rect, rect2)
) {

.....
}
if (Rect.intersects(rect, rect3)
) {
.....

}
if (Rect.intersects(rect, rect4)
) {
.....

}
if (Rect.intersects(rect, rect5)
) {
.....

}
if (Rect.intersects(rect, rect6)
) {
.....

}


downy1 += 1;
downy2 += 1;
downy3 += 1;
downy4 += 1;
downy5 += 1;
downy6 += 1;

params1.topMargin = params1.topMargin
+ downy1;
params2.topMargin = params2.topMargin
+ downy2;
params3.topMargin = params3.topMargin
+ downy3;
params4.topMargin = params4.topMargin
+ downy4;
params5.topMargin = params5.topMargin
+ downy5;
params6.topMargin = params6.topMargin
+ downy6;
p1.setLayoutParams(params1);
p2.setLayoutParams(params2);
p3.setLayoutParams(params3);
c1.setLayoutParams(params4);
c2.setLayoutParams(params5);
c3.setLayoutParams(params6);
if (p1.getTop() > height) {
downy1 = 0;

params1.leftMargin = newX;
params1.topMargin = orig1y;
p1.setLayoutParams(params1);

}

if (p2.getTop() > height) {
downy2 = 0;

params2.leftMargin = newX;
params2.topMargin = orig2y;
p2.setLayoutParams(params2);

}

if (p3.getTop() > height) {
downy3 = 0;

params3.leftMargin = newX;
params3.topMargin = orig3y;
p3.setLayoutParams(params3);

}

if (c1.getTop() > height
&& !failedM) {
downy4 = 0;

params4.leftMargin = newX;
params4.topMargin = orig4y;
c1.setLayoutParams(params4);
}

if (c2.getTop() > height
&& !failedM) {
downy5 = 0;

params5.leftMargin = newX;
params5.topMargin = orig5y;
c2.setLayoutParams(params5);

}

if (c3.getTop() > height
&& !failedM) {
downy6 = 0;

params6.leftMargin = newX;
params6.topMargin = orig6y;
c3.setLayoutParams(params6);

}

}
});
}
}
}).start();

}

});
return "Executed";
}

@Override
protected void onPostExecute(String result) {

}

@Override
protected void onPreExecute() {
}

@Override
protected void onProgressUpdate(Void... values) {
}
}

正如你所看到的(如果 view.getTop() > height)

这意味着当 View Y 大于高度时,即 View 从顶部移动到底部时,它将返回到顶部。

我希望我说清楚了

提前致谢。

最佳答案

您应该使用动画框架。 (view.animate()...)。设置布局参数需要重新计算布局,这可能不是一个便宜的操作(取决于您的布局)。

您可以使用动画框架或设置 View 的translateX/Y等属性,以避免重新计算布局。

关于java - 安卓java |更新 View 布局参数时出现卡顿和滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30969105/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com