View appearance/disappearance 在某些设备上没问题,在其他设备上不行
View appearance/disappearance is fine on some device, not on others
我很难解决这个问题:
我编写了一个应用程序,允许用户摆脱屏幕上的一些彩色方块。在我的 class coloredSquare 中,我有一个这样的方法:
public void appearance(){
setLayoutParams(new RelativeLayout.LayoutParams(side/ 10, side/ 10));
final int[] count = {1};
final Runnable run = new Runnable() {
@Override
public void run() {
setLayoutParams(new RelativeLayout.LayoutParams(count[0] * side/ 50, count[0] * side/ 50));//View grows of 1/50 of its final size
if (count[0] < 50){
handler.postDelayed(this, 20);
} else {
setClickable(true);//When done
}
count[0]++;
}
};
handler = new Handler();
handler.postDelayed(run, 10);
}
当 运行 在我的 Samsung Galaxy S4 mini 上运行时,它工作正常。
但是,例如,它在 Wiko Highway 4G 或模拟器 1080x1920 上不起作用,我不明白为什么。
当我说这不起作用时:视图出现并增长,但当它增长时,postDelayed 之前的每个小视图都保留在那里。
当我试图通过点击它让它们消失时,它缩小得很好,但所有其他更大的视图(在 postDelayed 之前)也留在那里。
如果还有不明白的地方,你会在下面的计时器上。
同时,我得到了一个像这样的非常简单的计时器:
final java.util.Timer t = new java.util.Timer();
t.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
if(termine){
t.cancel();
}
if(seconds == 0){
vCoul.setText(String.valueOf(minutes) + ":00");
} else if (seconds < 10) {
vCoul.setText(String.valueOf(minutes) + ":0" + String.valueOf(seconds));
} else {
vCoul.setText(String.valueOf(minutes) + ":" + String.valueOf(seconds));
}
seconds -= 1;
if(seconds == -1){
seconds = 59;
minutes=minutes-1;
}
}
});
}
}, 0, 1000);
但是每一秒,新的时间都在与前一个重叠。
抱歉拖了这么久post,提前感谢您的回答!
几个月前我就想通了,但我希望这个答案能对其他人有所帮助。
我没有在 Activity 中放置任何背景,因此在大多数三星设备上,没有任何问题,因为三星可以很好地处理无背景活动。
不过,在一些 Wiko 和 Archos 设备上,您必须放置一个背景(如背景:#000000),以便您可以在其上平滑地移动视图。
我很难解决这个问题: 我编写了一个应用程序,允许用户摆脱屏幕上的一些彩色方块。在我的 class coloredSquare 中,我有一个这样的方法:
public void appearance(){
setLayoutParams(new RelativeLayout.LayoutParams(side/ 10, side/ 10));
final int[] count = {1};
final Runnable run = new Runnable() {
@Override
public void run() {
setLayoutParams(new RelativeLayout.LayoutParams(count[0] * side/ 50, count[0] * side/ 50));//View grows of 1/50 of its final size
if (count[0] < 50){
handler.postDelayed(this, 20);
} else {
setClickable(true);//When done
}
count[0]++;
}
};
handler = new Handler();
handler.postDelayed(run, 10);
}
当 运行 在我的 Samsung Galaxy S4 mini 上运行时,它工作正常。 但是,例如,它在 Wiko Highway 4G 或模拟器 1080x1920 上不起作用,我不明白为什么。
当我说这不起作用时:视图出现并增长,但当它增长时,postDelayed 之前的每个小视图都保留在那里。 当我试图通过点击它让它们消失时,它缩小得很好,但所有其他更大的视图(在 postDelayed 之前)也留在那里。
如果还有不明白的地方,你会在下面的计时器上。
同时,我得到了一个像这样的非常简单的计时器:
final java.util.Timer t = new java.util.Timer();
t.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
if(termine){
t.cancel();
}
if(seconds == 0){
vCoul.setText(String.valueOf(minutes) + ":00");
} else if (seconds < 10) {
vCoul.setText(String.valueOf(minutes) + ":0" + String.valueOf(seconds));
} else {
vCoul.setText(String.valueOf(minutes) + ":" + String.valueOf(seconds));
}
seconds -= 1;
if(seconds == -1){
seconds = 59;
minutes=minutes-1;
}
}
});
}
}, 0, 1000);
但是每一秒,新的时间都在与前一个重叠。
抱歉拖了这么久post,提前感谢您的回答!
几个月前我就想通了,但我希望这个答案能对其他人有所帮助。 我没有在 Activity 中放置任何背景,因此在大多数三星设备上,没有任何问题,因为三星可以很好地处理无背景活动。
不过,在一些 Wiko 和 Archos 设备上,您必须放置一个背景(如背景:#000000),以便您可以在其上平滑地移动视图。