我想做一个'寻找'文字如下: "正在加载。" - > "正在加载.." - > "正在加载......"
然后一旦我获得某些数据,请停止此动画文本,然后将文本设置为"找到。"
我尝试以这种方式实现它:
@Component({
selector: 'my-list',
templateUrl: 'my-list.component.html',
styleUrls: ['my-list.component.css']
})
export class MyListComponent implements OnInit {
items: ItemModel[] = [];
}
@Component({
selector: 'my-item',
templateUrl: 'my-item.component.html',
styleUrls: ['my-item.component.css'],
animations: [
trigger('itemState', [
state('inactive', style({
transform: `rotate(${DYNAMIC_DEGREE_VAR}deg)`
})),
state('active', style({
transform: `rotate(0deg)`
})),
transition('inactive => active', animate('100ms ease-in')),
transition('active => inactive', animate('100ms ease-out'))
])
]
})
export class MyItemComponent implements OnInit {
item: ItemModel;
state: string = 'inactive';
}
// ---------------------------------------------------------
// my-item.component.html
<div [@itemState]="state"></div>
// my-list.component.html
<my-item [item]="item" *ngFor="let items of item"></my-item>
然后我会运行这个过程:
ExecutorService threadPoolExecutor = Executors.newSingleThreadExecutor();
Future textAnimationTaskFuture;
Runnable textAnimationTask;
textAnimationTask = new Runnable() {
@Override
public void run() {
int passedTime = 0;
while(passedTime < 3000)
{
if(passedTime < 1000){
textView.setText("Loading.");
}
else if(passedTime >= 1000 && passedTime < 2000 )
{
textView.setText("Loading..");
}else if (passedTime >= 3000)
{
textView.setText("Loading...");
}
passedTime = passedTime + 1;
if( passedTime == 3000 )
passedTime = 0;
}
}
};
取消它:
textAnimationTaskFuture = threadPoolExecutor.submit(textAnimationTask);
不幸的是,循环不会在取消时停止(true)。
答案 0 :(得分:0)
我不确切地知道它为什么不一致,但是你遇到的一个明显问题是你试图从一个线程而不是从UI线程改变一个视图。要将文本设置为视图,您需要执行以下操作:
runOnUiThread(new Runnable() {
@Override
public void run() {
textView.setText("MY_TEXT");
}
});
关于循环没有停止 - 我建议你调试它,从查看代码我无法检测到循环的任何问题。