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

时间:2016-02-29 04:56:09

标签: java android timer

我有一个Android活动,我根据从我的在线数据库加载的图像向用户显示幻灯片。图像每10秒更改一次,定时器每1秒更新一次,显示当前图像显示的秒数。现在我想实现当用户按下ImageView(填充整个活动)时图片跳过并且下一张要显示的图片被加载到图像视图中的功能,这样用户就不必等待整整10秒,他可以看到下一张照片。这个问题是当前图片由我的for循环中的i计数器指示。我尝试分配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);

2 个答案:

答案 0 :(得分:0)

您可以按照以下三个步骤进行操作:

1.首先制作一个只能改变图像的功能。

2.设置可以每10秒更换一次的计时器。在计时器上调用第一个函数。

3.set onclick listener并调用第一个函数。

答案 1 :(得分:0)

我建议使用ViewFlipper

ViewAnimator

ViewFlipper将在已添加到其中的两个或多个视图之间设置动画。一次只能展示一个孩子。如果需要,可以定期在每个孩子之间自动翻转,这样你的图像幻灯片目的就可以解决了。

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

请参阅Android ViewFlipper Example以实现图片幻灯片。