我有一个在主要活动上绘制一条线的类,这条线用于设置数字。 (如果滑动改变了这一行的数字和长度。)
所以现在我想在我设置数字线时制作小动画。 例如我首先打开活动,然后在6号上设置“line”。所以我想如果第二次打开活动我想在6号上设置“line”。(我有这个)但是我想要小动画从0快速移动到6.
每个方法运行..但运行错误我想要每隔50ms更新UI(mainactivity中的imageview),但所有这些示例都更新了IF线程完成,所以我看不到动画我在数字上看到了JUMP。这是错的。
我写这个代码// thread
private void IntSkok(final int noci) {
// int noci; //how number I want set
final int POCKROKOV=5; //steps between n and n+1
final double[] hodnota = new double[1]; //how much px is one steps
Thread timer = new Thread() { //new thread
public void run() {
Boolean b = true;
try {
do {
sleep(50);
while (hodnota[0] <(noci*34)) {
hodnota[0] = hodnota[0] + (34.0/POCKROKOV);
progresInt.prepisBol(hodnota[0]); //this method set "line" on position I put int in px and thise method calculate number on this pozition and rewrite on mainactivity
imgint=progresInt.Aktualizacia(); // this method is only imageview.invalidate();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
while (b == true);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
}
};
};
timer.start();
}
我把信息放在代码中
private void IntSkok(final int noci) {
// int noci;
final int POCKROKOV=5;
final double[] hodnota = new double[1];
Thread timer = new Thread() { //new thread
public void run() {
Boolean b = true;
try {
do {
sleep(50);
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
while (hodnota[0] <(noci*34)) {
hodnota[0] = hodnota[0] + (34.0/POCKROKOV);
progresInt.prepisBol(hodnota[0]);
imgint=progresInt.Aktualizacia();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
}
while (b == true);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
}
};
};
timer.start();
}
private void IntSkok2(final int noci){
//int noci;
final int POCKROKOV=5;
final double[] hodnota = new double[1];
Thread thread = new Thread(){
@Override
public void run() {
try {
synchronized (this) {
wait(50);
runOnUiThread(new Runnable() {
@Override
public void run() {
while (hodnota[0] <(noci*34)) {
hodnota[0] = hodnota[0] + (34.0/POCKROKOV);
progresInt.prepisBol(hodnota[0]);
imgint=progresInt.Aktualizacia();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
}
} catch (InterruptedException e) {
e.printStackTrace();
}
};
};
thread.start();
}
每个方法运行..但运行错误我想要每隔50ms更新UI(mainactivity中的imageview),但所有这些示例都更新IF线程完成,所以我看不到动画我看到JUMP号码。这是不对的。
互联网告诉我可能会尝试 runOnUiThread(new Runnable() {
@Override
public void run() {
但是这比我的代码更加错误,因为这会在完成线程时启动我的活动。
请你有一些想法如何解决我的问题谢谢
答案 0 :(得分:0)
你试图以你的方式阻止ui线程。如果你想运行OnUiThread,只需做一些与UI相关的事情。
我认为这种改变会起作用。
Thread timer = null;
private void IntSkok(final int noci) {
// int noci; //how number I want set
final int POCKROKOV = 5; // steps between n and n+1
final double[] hodnota = new double[1]; // how much px is one steps
timer = new Thread() { // new thread
public void run() {
Boolean b = true;
try {
do {
sleep(50);
while (hodnota[0] < (noci * 34)) {
hodnota[0] = hodnota[0] + (34.0 / POCKROKOV);
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
progresInt.prepisBol(hodnota[0]);
progresInt.Aktualizacia();
}
});
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} while (b == true);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
}
}
};
timer.start();
}