线程像方法一样工作(完成时更新)
Thread works like method (update when finish)
我有class在mainactivity上画一条线,这条线用来设置数字。 (如果滑动改变了这条线的数量和长度。)
所以现在我想在数字上设置线条时制作小动画。
例如,我首先打开 activity,然后在 6 号上设置 "line"。所以我想如果第二个打开 activity,我想在 6 号上设置 "line"。(我有这个)但是我想要小动画从 0 快速移动到 6。
每个方法运行..但是运行错了我想更新UI(main activity中的imageview)每50ms但是所有这个例子更新 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();
}
每个方法运行..但是运行错了我想每50毫秒更新一次UI(main activity中的imageview)但是所有这些例子都更新IF线程完成,所以我看不到动画我看到数字上的 JUMP。这是错的。
网上告诉我可以试试
runOnUiThread(new Runnable() {
@Override
public void run() {
但是这个工作比我的代码更错误,因为这会在完成线程时启动我的 activity。
请问你有什么办法解决我的问题谢谢
您正试图以您的方式阻止 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();
}
我有class在mainactivity上画一条线,这条线用来设置数字。 (如果滑动改变了这条线的数量和长度。)
所以现在我想在数字上设置线条时制作小动画。 例如,我首先打开 activity,然后在 6 号上设置 "line"。所以我想如果第二个打开 activity,我想在 6 号上设置 "line"。(我有这个)但是我想要小动画从 0 快速移动到 6。
每个方法运行..但是运行错了我想更新UI(main activity中的imageview)每50ms但是所有这个例子更新 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();
}
每个方法运行..但是运行错了我想每50毫秒更新一次UI(main activity中的imageview)但是所有这些例子都更新IF线程完成,所以我看不到动画我看到数字上的 JUMP。这是错的。
网上告诉我可以试试
runOnUiThread(new Runnable() {
@Override
public void run() {
但是这个工作比我的代码更错误,因为这会在完成线程时启动我的 activity。
请问你有什么办法解决我的问题谢谢
您正试图以您的方式阻止 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();
}