单击按钮时使用计时器更改 ImageView 中的图像

Change images in ImageView with timer when button is clicked

我想在带计时器(延迟 1 秒)的 ImageView 中更改 20 张图像。 有人能帮我吗?我尝试了 postdelayed runnable method 但我的 Activity 运行不正常(10 次点击中有 2 次崩溃)当我在 xml 文件中放入 17 张图片时(17 个 ImageViews)。每张图片的最大尺寸为 230kb。 有人可以帮我使用另一种方法吗?我的代码对于我使用 switch case 来说太长了。有人可以 post 您的任何代码示例吗?它真的有帮助。谢谢

E/AndroidRuntime: FATAL EXCEPTION: main
E/AndroidRuntime: Process: com.example.computer.mathkiddofinal, PID: 32031
E/AndroidRuntime: java.lang.RuntimeException:
    Unable to start activity
        ComponentInfo{com.example.computer.mathkiddofinal/com.example.computer.mathkiddofinal.grade_level.topics.gradeFour_PlaceValue}:
            android.view.InflateException: Binary XML file line #25:
                Error inflating class <unknown>
E/AndroidRuntime:     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2338)

这是我的代码示例,大约有 20 个 ImageView。例如,我只 posted 2 ImageView。

public class gradeFour_PlaceValue extends Activity {

int count = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_grade_four__place_value);

    final Button btn = (Button) findViewById(R.id.button2);

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(final View v) {
            final ImageView[] images = {(ImageView) findViewById(R.id.im1),
                    (ImageView) findViewById(R.id.im2)};
            v.postDelayed(new Runnable() {
                @Override
                public void run() {
                    images[count].setVisibility(View.VISIBLE);
                    switch (count){
                        case 0:
                            images[1].setVisibility(View.GONE);
                            break;
                        case 1:
                            images[0].setVisibility(View.GONE);
                            break;
                        ...

我的xml布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/place1">

<Button
    style="?android:attr/buttonStyleSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Start"

    android:id="@+id/button2"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="179dp" />

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/im1"
    android:visibility="gone"
   android:background="@drawable/place1"
    android:layout_alignParentBottom="true" />

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/im2"
    android:visibility="gone"
    android:layout_alignBottom="@+id/im1"
    android:layout_centerHorizontal="true"
    android:background="@drawable/place2" />

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/im3"
    android:visibility="gone"
    android:layout_alignBottom="@+id/im1"
    android:layout_centerHorizontal="true"
    android:background="@drawable/place3" />

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/im4"
    android:visibility="gone"
    android:layout_alignBottom="@+id/im1"
    android:layout_centerHorizontal="true"
    android:background="@drawable/place4" />

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:visibility="gone"
    android:id="@+id/im5"
    android:layout_alignBottom="@+id/im1"
    android:layout_centerHorizontal="true"
    android:background="@drawable/place5" />

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/im6"
    android:layout_alignBottom="@+id/im1"
    android:visibility="gone"
    android:layout_centerHorizontal="true"
    android:background="@drawable/place6" />

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/im7"
    android:visibility="gone"
    android:layout_alignBottom="@+id/im1"
    android:layout_centerHorizontal="true"
    android:background="@drawable/place7" />

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:visibility="gone"
    android:id="@+id/im8"
    android:layout_alignBottom="@+id/im1"
    android:layout_centerHorizontal="true"
    android:background="@drawable/place8" />

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:visibility="gone"
    android:id="@+id/im9"
    android:layout_alignBottom="@+id/im1"
    android:layout_centerHorizontal="true"
    android:background="@drawable/place9" />

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:visibility="gone"
    android:id="@+id/im10"
    android:layout_alignBottom="@+id/im1"
    android:layout_centerHorizontal="true"
    android:background="@drawable/place10" />

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:visibility="gone"
    android:id="@+id/im11"
    android:layout_alignBottom="@+id/im1"
    android:layout_centerHorizontal="true"
    android:background="@drawable/place11" />

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/im12"
    android:visibility="gone"
    android:layout_alignBottom="@+id/im1"
    android:layout_centerHorizontal="true"
    android:background="@drawable/place12" />

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/im13"
    android:visibility="gone"
    android:layout_alignBottom="@+id/im1"
    android:layout_centerHorizontal="true"
    android:background="@drawable/place13" />

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:visibility="gone"
    android:id="@+id/im14"
    android:layout_alignBottom="@+id/im1"
    android:layout_centerHorizontal="true"
    android:background="@drawable/place14" />

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/im15"
    android:visibility="gone"
    android:layout_alignBottom="@+id/im1"
    android:layout_centerHorizontal="true"
    android:background="@drawable/place15" />

使用以下代码

Handler handler = new Handler();
Runnable runnable = new Runnable() 
{
    int i = 0;

    public void run() 
    {
            image1.setImageResource(imageArray[i]);

            i++;
            if (i > imageArray.length - 1) 
            {
                i = 0;

            }
            Animation animationFadeIn = AnimationUtils.loadAnimation(DashBordActivity.this, R.anim.anim1);
            image1.startAnimation(animationFadeIn);
            handler.postDelayed(this, 3000); // for interval...
        }

    };
    handler.postDelayed(runnable, 1000); // for initial delay..

在可绘制文件夹中创建一个名为 images_slideshow 的文件或任何您想要的文件:

<animation-list
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item android:drawable="@drawable/image1" android:duration="1000" />
    <item android:drawable="@drawable/image2" android:duration="1000" />
    <item android:drawable="@drawable/image3" android:duration="1000" />
    <item android:drawable="@drawable/image4" android:duration="1000" />
    <item android:drawable="@drawable/image5" android:duration="1000" />
    <item android:drawable="@drawable/image6" android:duration="1000" />
    <item android:drawable="@drawable/image7" android:duration="1000" />
    <item android:drawable="@drawable/image8" android:duration="1000" />
    <item android:drawable="@drawable/image9" android:duration="1000" />
    <item android:drawable="@drawable/image10" android:duration="1000" />
    <item android:drawable="@drawable/image11" android:duration="1000" />
    <item android:drawable="@drawable/image12" android:duration="1000" />
    <item android:drawable="@drawable/image13" android:duration="1000" />
    <item android:drawable="@drawable/image14" android:duration="1000" />
    <item android:drawable="@drawable/image15" android:duration="1000" />
    <item android:drawable="@drawable/image16" android:duration="1000" />
    <item android:drawable="@drawable/image17" android:duration="1000" />
    <item android:drawable="@drawable/image18" android:duration="1000" />
    <item android:drawable="@drawable/image19" android:duration="1000" />
    <item android:drawable="@drawable/image20" android:duration="1000" />
</animation-list>

这将每 1 秒随机播放一次 ImageView,您可以根据需要从每个图像的 android:duration 属性更改持续时间。通过将列表的 android:oneshot 属性设置为 true,它将只循环一次然后停止并停留在最后一帧。如果设置为 false 则动画将循环播放。

在onCreate()之前声明你的观点:

ImageView imageViews;
AnimationDrawable imagesAnimation;

在你的 onCreate() 中添加:

imageViews = (ImageView) findViewById(R.id.im1);
imageViews.setBackgroundResource(R.drawable.images_slideshow);
imagesAnimation = (AnimationDrawable) imageViews.getBackground();

imageViews.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            if (imagesAnimation.isRunning()) {
                imagesAnimation.stop();
            } else {
                imagesAnimation.start();
            }
        }
        return true;
    }
});

您现在可以在 ImageView 的 Touch 上启动和暂停图像动画。你可以改变它的逻辑,比如通过按钮的 onClick 来启动和暂停它。

文档:AnimationDrawable | Android Developers

试一试。希望对您有所帮助。

您正在使用 Visibility.GONE 在 layout.xml (R.layout.activity_grade_four__place_value) 和 Java 代码 (gradeFour_PlaceValue) 中隐藏 ImageView。

我认为您应该在 xml 代码中使用 visibility="invisible" 并在 Java 代码中使用 images[n].setVisibility(View.INVISIBLE);

因为Visibility.GONE表示视图不在布局中。所以你使用 RelativeLayout 作为父 ViewGroup,从第二个到最后一个 ImageViews 依赖于它们到第一个 ImageView (im1),

的位置
android:layout_alignBottom="@+id/im1"

当第一个 ImageView 不存在时,他们无法确定自己的位置 (Visibility.GONE)。

当您使用 Visibility.INVISIBLE 时,它们在布局中的存在并没有消失,只是它们的可见性变得不可见。

希望对您有所帮助。