我在我的android项目的drawable resource文件夹中有一个动画GIF列表。我需要一个接一个地播放这些gif,等待几秒钟,然后播放下一个gif。但当我运行应用程序时,所有gif加载速度非常快,所以我只能看到最后一个gif。我用Glide玩gifs,这是我的代码
Handler handler1 = new Handler();
for (int a = 1; a<=lines.size() ;a++) {
handler1.postDelayed(new Runnable() {
@Override
public void run() {
String resName = "";
int duration = 0;
resName = "wo_" + (lines.get(slideIndex).split(",")[0]).toLowerCase().trim().replace(".gif", "");
duration = Integer.parseInt(lines.get(slideIndex++).split(",")[2].trim());
int resourceId = getResId(resName, R.drawable.class);//this.getResources().getIdentifier(resName, "drawable", this.getPackageName());
Glide.with(WorkoutActivity.this).asGif().load(resourceId).into(imageView);
}
}, 5000);
}
但当我运行应用程序时,所有gif加载速度非常快,所以我只能看到最后一个gif
因为您正在并行发布所有Runnable。
不使用for循环:
>
创建处理程序实例:
Handler handler1 = new Handler();
为处理程序创建可运行:
Runnable mRunnable=new Runnable() {
@Override
public void run() {
ListIterator<?> iter = tempLinesArray.listIterator();
if(iter.hasNext()){
? str = iter.next(); // item from lIst
// do your work here
....
iter.remove(); // remove item from list.
Glide.with(WorkoutActivity.this).asGif().load(resourceId).listener(new RequestListener<GifDrawable>() {
...
@Override
public boolean onResourceReady(GifDrawable resource, Object model, Target<GifDrawable> target, DataSource dataSource, boolean isFirstResource) {
handler1.postDelayed(mRunnable,5000);
return false;
}
}).into(imageView);
}
}
};
最后调用handler1.post延迟
:
ArrayList<?> tempLinesArray=new ArrayList<>();
tempLinesArray.addAll(lines);
handler1.postDelayed(mRunnable,5000);
确保在组件暂停或停止时从Handler中删除所有回调:
handler1.removeCallbacks(null);
我想你希望你的每一个gif播放间隔为5000
因此,将间隔乘以a,这样就可以放置50001000015000
Handler handler1 = new Handler();
for (int a = 1; a<=lines.size() ;a++) {
handler1.postDelayed(new Runnable() {
@Override
public void run() {
String resName = "";
int duration = 0;
resName = "wo_" + (lines.get(slideIndex).split(",")[0]).toLowerCase().trim().replace(".gif", "");
duration = Integer.parseInt(lines.get(slideIndex++).split(",")[2].trim());
int resourceId = getResId(resName, R.drawable.class);//this.getResources().getIdentifier(resName, "drawable", this.getPackageName());
Glide.with(WorkoutActivity.this).asGif().load(resourceId).into(imageView);
}
}, a * 5000);
}
您可以为此使用计时器
// Declare globally
private int position = -1;
/**
* This timer will call each of the seconds.
*/
Timer mTimer = new Timer();
mTimer.schedule(new TimerTask() {
@Override
public void run() {
// As timer is not a Main/UI thread need to do all UI task on runOnUiThread
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
// increase your position so new image will show
position++;
// check whether position increased to length then set it to 0
// so it will show images in circuler
if (position >= imageArray.length)
position = 0;
// Set Image
MyImageView.setImageResource(imageArray[position]);
}
});
}
}, 0, 5000);
我正在尝试将我的UIAlertViews更改为UIAlertController。我为它设置了这个操作: 但是,处理程序直到动作被点击大约一秒钟后才运行。有什么方法可以加快速度吗?
如何从Anable剧本和处理程序运行单个任务,并在该任务成功完成时收到通知,同时跳过相关剧本中的所有其他任务? 目前,我执行以下操作: 然后在任务完成后按Ctrlc。但是,这也将跳过处理程序。 我知道我可以给任务添加一个标签并使用它,就像在ansible playbook中如何只运行一个任务?,但我更希望能够在不添加标签的情况下做到这一点。这可能吗?
我的RestController类: 我的ExceptionHandler: 例外响应:
我正在写一个程序,显示如下所示的航班信息: 我的问题是使用方法时: 当正常运行时,由于某种原因它不会执行,但是当我使用调试器执行程序时,一切都执行得很好,我得到了一个有意义的输出(格式不是很好,但我可以使用),为什么会发生这种情况? 输出应该是这样的: 当我正常运行时,我会得到这个: 这是当我一步虽然(或运行调试): 我希望输出的是单步执行部分(稍后我将处理格式化) eddit:我已经在错误流中添
我正在尝试设置与spring webflux安全自定义字符串消息,如果登录/注销成功或失败。除“AuthenticationFailureHandler”外,处理程序都在工作。 文档中提到了一些关于“logoutsuccessURL()”的内容,但它并不存在,并且这些处理程序返回的是mono 。 所以我有两个问题: > 如何返回一些字符串作为响应,例如,如果authenticaion失败,那么“无