gpt4 book ai didi

使用 ViewSwitcher 的 Android 图像幻灯片

转载 作者:行者123 更新时间:2023-11-29 18:00:00 27 4
gpt4 key购买 nike

我正在尝试制作一个简单的幻灯片,无需单击按钮即可淡出和淡入一些图像。我找到了几个例子来帮助我,但我无法让第一张图片淡入第二张图片。截至目前,它只是淡出,仅此而已。我的代码如下。

淡入淡出.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator">
<alpha
android:fromAlpha="0.1"
android:toAlpha="1.0"
android:duration="5000"
android:repeatCount="infinite"
/>
</set>

淡出.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator">
<alpha
android:fromAlpha="1.0"
android:toAlpha="0.1"
android:duration="5000"
android:repeatCount="infinite"
/>
</set>

布局.xml

<?xml version="1.0" encoding="utf-8"?>
<ViewSwitcher xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/switcher"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:inAnimation="@anim/fade_in"
android:outAnimation="@anim/fade_out" >

<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitCenter"
android:src="@drawable/image1" />

<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="fitCenter"
android:src="@drawable/image2" />
</ViewSwitcher>

MainClass.Activity

public class MainClass extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.next);

slideshow();
}

public void slideshow() {
ViewSwitcher switching = (ViewSwitcher)findViewById(R.id.switcher);
if (switching.getDisplayedChild() == 0) {
switching.showNext();
} else {
switching.showPrevious();
}
}

}

最佳答案

在这种情况下,您需要使用 timer .你可以这样使用它:

public class MainClass extends Activity {

private Timer timer;
private ViewSwitcher switching;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.next);

switching = (ViewSwitcher)findViewById(R.id.switcher);

timer = new Timer();
timer.scheduleAtFixedRate(new NextImageTask(), 0, 5000);
//5000 is in milliseconds, meaning 5 seconds

}

public void slideshow() {
if (switching.getDisplayedChild() == 0) {
switching.showNext();
} else {
switching.showPrevious();
}
}

private class NextImageTask extends TimerTask {

@Override
public void run() {
runOnUiThread(new Runnable() {

@Override
public void run() {
slideshow();
}
});
}
}
}

这段代码有什么作用?好吧,让我们一步步来吧。先声明观点

private Timer timer;
private ViewSwitcher switching;

然后在onCreate方法中初始化它们

switching = (ViewSwitcher)findViewById(R.id.switcher);

timer = new Timer();

然后我们开始计时!要启动一个计时器并告诉它做什么,我们这样做

timer.scheduleAtFixedRate(new NextImageTask(), 0, 5000);

这行代码的基本意思是嘿计时器,以 5 秒的固定速率安排任务。立即开始!

第一个参数是要调度的任务,一个对象,NextImageTask()。此对象包含一个 Runnable,其中包含每个间隔运行的代码。间隔是 5 秒的固定速率。然而在代码中它被写成5000。这是因为该方法接受第三个参数作为毫秒。要获得 5 秒,我们必须将 5 乘以 1,000,结果是,是的,您猜对了,是 5,000。通过将第二个参数作为 0 来要求计时器立即开始。这就是延迟。如果您在那里传递 2000,计时器将在 2 秒延迟后启动。就像第三个参数一样,该方法接受第二个参数作为毫秒

接下来是 slideshow() 方法,与 OP 相同。这就是 OP 想要做的。

最后是私有(private)对象,NextImageTask()

private class NextImageTask extends TimerTask {

@Override
public void run() {
runOnUiThread(new Runnable() {

@Override
public void run() {
slideshow();
}
});
}
}

这是定时器将以固定速率/每 5 秒完成的任务。它应该扩展 TimerTask使定时器正常工作。 TimerTask 是一个抽象类,因此 NextImageTask() 应该实现一个方法,即 run() 方法。此方法应包含计时器将以固定间隔运行的代码。这在不同的线程上运行,因此如果您需要像 OP 一样在 UI 中执行某些操作,我们需要在 UI 线程上运行。这就是我们调用 runOnUiThread 的原因这里。最后,内部是另一个调用 OP 方法 slideshow() 的可运行对象。

关于使用 ViewSwitcher 的 Android 图像幻灯片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16800251/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com