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