Java 在android活动中使用计时器显示幻灯片

Java 在android活动中使用计时器显示幻灯片,java,android,timer,Java,Android,Timer,我有一个android活动,根据从在线数据库加载的图像向用户显示幻灯片。图像每10秒更改一次,计时器每1秒更新一次,显示当前图像将再显示多少秒。现在我想实现这样一个功能,当用户按下ImageView(它填充整个活动)时,图片会跳过,并且要显示的下一张图片会加载到图像视图中,这样用户就不必等待整整10秒钟,并且可以在需要时看到下一张图片。问题是当前图片由for循环内的i计数器指示。我尝试了assingingcurrphoto=I,但是这不起作用,因为它需要将currphoto声明为final。我正

我有一个android活动,根据从在线数据库加载的图像向用户显示幻灯片。图像每10秒更改一次,计时器每1秒更新一次,显示当前图像将再显示多少秒。现在我想实现这样一个功能,当用户按下ImageView(它填充整个活动)时,图片会跳过,并且要显示的下一张图片会加载到图像视图中,这样用户就不必等待整整10秒钟,并且可以在需要时看到下一张图片。问题是当前图片由for循环内的
i
计数器指示。我尝试了assinging
currphoto=I
,但是这不起作用,因为它需要将currphoto声明为final。我正在寻找有关如何以最佳方式实现此功能的建议

 public void slideshow(ArrayList<ImageDisplayer> a, final int currImage, final int offset) {
    ImageView imageView = (ImageView) findViewById(R.id.picturedisplay);
    int currphoto = 0;

    final long DELAY = 300; // milliseconds
    final long VIEW_TIME = 10000;
    Timer timer = new Timer();
    final TimerTask update_time = new TimerTask() {
        @Override
        public void run() {
            SlideShow.this.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    TextView time_rem = (TextView) findViewById(R.id.time_rem);
                    int timeRem = Integer.parseInt(time_rem.getText().toString());
                    timeRem--;
                    time_rem.setText(Integer.toString(timeRem));
                }});
        }};
    timer.scheduleAtFixedRate(
            new TimerTask() {
                int i = currImage;
                int off = 0;
                @Override
                public void run() {
                    SlideShow.this.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            if (i < imageDisplayerArrayList.size()) {
                                TextView time_rem = (TextView) findViewById(R.id.time_rem);
                                time_rem.setText("10");
                                Bitmap myBitmap = ConvertToImage(imageDisplayerArrayList.get(i).getImage());
                                ImageView imageView = (ImageView) findViewById(R.id.picturedisplay);
                                imageView.setImageBitmap(myBitmap);
                                imageView.setScaleType(ImageView.ScaleType.FIT_XY);
                                Toast.makeText(getApplicationContext(),
                                Integer.toString(imageDisplayerArrayList.size()), Toast.LENGTH_LONG)
                               .show();
                                i++;
                                off = (int)(Math.rint(Math.ceil((double) i / 10) * 10));
                                if (i % 5 == 0 && i % 10 != 0) {
                                    uploadImage2("2650225",Integer.toString(off),i);
                                }
                            }
                            else {
                                update_time.cancel();
                            }
                                                             }});
                }},
            DELAY,VIEW_TIME
    );
    timer.scheduleAtFixedRate(update_time, 0,1000);
public void幻灯片放映(ArrayList a,final int currImage,final int offset){
ImageView ImageView=(ImageView)findViewById(R.id.picturedisplay);
int=0;
最终长延迟=300;//毫秒
最终远景时间=10000;
定时器=新定时器();
final TimerTask update_time=new TimerTask(){
@凌驾
公开募捐{
SlideShow.this.runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
TextView time_rem=(TextView)findViewById(R.id.time_rem);
int timeRem=Integer.parseInt(time_rem.getText().toString());
timeRem--;
time_rem.setText(Integer.toString(timeRem));
}});
}};
timer.scheduleAtFixedRate(
新TimerTask(){
int i=当前图像;
int off=0;
@凌驾
公开募捐{
SlideShow.this.runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
if(i
您可以执行三个步骤:

1.首先制作一个只能改变图像的函数

2.设置计时器,可每10秒更改一次。调用计时器上的第一个功能


3.设置onclick listener并调用first函数。

我建议使用

ViewFlipper将在添加到其中的两个或多个视图之间设置动画。一次只显示一个子视图。如果需要,可以在每个子视图之间以固定间隔自动翻转,因此您的图像幻灯片放映目的将通过此解决

Android ViewFlipper支持自动翻转,可以使用startFlipping()和stopFlipping()方法进行控制。我们可以使用setFlipInterval(period)设置自动翻转间隔。请注意,间隔时间以毫秒为单位


请参阅实现图像幻灯片。

imageview onClick logic在哪里?我没有实现它,我尝试在timertasks之外实现它,但是这会引起最后一个变量的问题。在timertasks内部实现它不起作用,因为我需要在加载下一个图像时重新启动它们,我无法这样做我在哪里设置onClickListener tho?在计时器内还是在onCreate方法中?imagechange()计时器{imagechange()}onClickListener{imagechange()}