ViewPager 从 Firebase 数据库中的第一张图片到最后一张图片
ViewPager goes from first to very last image in Firebase database
我创建了一个应用程序,我将图像上传到 firebase,然后检索它们并在 viewpager 中显示它们。
我能够检索所有图像,但我的问题是,当在 viewpager 中时,它们从第一张图像到最后一张图像非常快(我看不到其他图像,我只看到第一张然后是最后一张)。
我曾尝试添加一个循环,该循环只是不断递增数字以延迟应用程序,但它没有用。
接下来我使用一个处理程序作为延迟器,但它没有用。
这是我的代码目前的样子 - 它在 TimerTask 中 class 因为 viewpager 会自动滑动,看起来很简单
public class MyTimerTask extends TimerTask{
@Override
public void run() {
menuSliderActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
int i=0;
while(i<sliderImg.size()){
while (viewPager.getCurrentItem()==i){
viewPager.setCurrentItem(i+1);
i++;
}
}
if (viewPager.getCurrentItem()==sliderImg.size()) {
viewPager.setCurrentItem(0);
}
}
});
}
}
我也试过了:
public class MyTimerTask extends TimerTask{
@Override
public void run() {
menuSliderActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
int i=0;
while(i<=sliderImg.size()){
if(viewPager.getCurrentItem()==i){
viewPager.setCurrentItem(i+1);
} else if (viewPager.getCurrentItem()==sliderImg.size()) {
viewPager.setCurrentItem(0);
}
i++;
}
}
});
}
}
有谁知道我做错了什么? (我是 android studio 和 java 的新手,所以我使用的函数 -运行nable()、运行()...等可能是错误的。
谢谢你。
您应该使用 CountDownTimer 在 ViewPager 中循环播放图像。所以它会根据你的需要慢慢循环。
new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
}
public void onFinish() {
mTextField.setText("done!");
}
}.start();
这是link
https://developer.android.com/reference/android/os/CountDownTimer
你可以试试这个,它使用线程
DelayedTask.java
class DelayedTask extends Thread {
private Activity activity;
private int count;
private int sleepDelay;
private int totalDelay = 5000;
public DelayedTask(Activity activity, int count) {
this.activity = activity;
this.count = count;
this.sleepDelay = totalDelay / count;
}
@Override
public void run() {
for (int i = 0; i < count; i++) {
try {
final int j = i;
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
viewPager.setCurrentItem(j);
}
});
Thread.sleep(sleepDelay);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
当所有图片都下载完后使用这个
DelayedTask delayedTask = new DelayedTask(MainActivity.this, 10 /*no of images*/);
delayedTask.start();
我创建了一个应用程序,我将图像上传到 firebase,然后检索它们并在 viewpager 中显示它们。 我能够检索所有图像,但我的问题是,当在 viewpager 中时,它们从第一张图像到最后一张图像非常快(我看不到其他图像,我只看到第一张然后是最后一张)。
我曾尝试添加一个循环,该循环只是不断递增数字以延迟应用程序,但它没有用。 接下来我使用一个处理程序作为延迟器,但它没有用。 这是我的代码目前的样子 - 它在 TimerTask 中 class 因为 viewpager 会自动滑动,看起来很简单
public class MyTimerTask extends TimerTask{
@Override
public void run() {
menuSliderActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
int i=0;
while(i<sliderImg.size()){
while (viewPager.getCurrentItem()==i){
viewPager.setCurrentItem(i+1);
i++;
}
}
if (viewPager.getCurrentItem()==sliderImg.size()) {
viewPager.setCurrentItem(0);
}
}
});
}
}
我也试过了:
public class MyTimerTask extends TimerTask{
@Override
public void run() {
menuSliderActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
int i=0;
while(i<=sliderImg.size()){
if(viewPager.getCurrentItem()==i){
viewPager.setCurrentItem(i+1);
} else if (viewPager.getCurrentItem()==sliderImg.size()) {
viewPager.setCurrentItem(0);
}
i++;
}
}
});
}
}
有谁知道我做错了什么? (我是 android studio 和 java 的新手,所以我使用的函数 -运行nable()、运行()...等可能是错误的。 谢谢你。
您应该使用 CountDownTimer 在 ViewPager 中循环播放图像。所以它会根据你的需要慢慢循环。
new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
}
public void onFinish() {
mTextField.setText("done!");
}
}.start();
这是link
https://developer.android.com/reference/android/os/CountDownTimer
你可以试试这个,它使用线程
DelayedTask.java
class DelayedTask extends Thread {
private Activity activity;
private int count;
private int sleepDelay;
private int totalDelay = 5000;
public DelayedTask(Activity activity, int count) {
this.activity = activity;
this.count = count;
this.sleepDelay = totalDelay / count;
}
@Override
public void run() {
for (int i = 0; i < count; i++) {
try {
final int j = i;
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
viewPager.setCurrentItem(j);
}
});
Thread.sleep(sleepDelay);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
当所有图片都下载完后使用这个
DelayedTask delayedTask = new DelayedTask(MainActivity.this, 10 /*no of images*/);
delayedTask.start();