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

时间:2015-09-19 10:32:15

标签: android android-imageview

我想用定时器(1秒延迟)更改ImageView内的20个图像。 有人能帮我吗?我尝试了 postdelayed runnable方法,但是当我在我的xml文件(17个ImageViews)中放入17个图像时,我的活动运行不正常(在10次点击中获得2次压缩)。每张图片的最大尺寸为230kb。 有人可以帮我使用其他方法吗?我的代码太长了,我使用switch case。有人可以发布你的代码的任何样本,这将真的有帮助。感谢。

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。我只发布了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" />

3 个答案:

答案 0 :(得分:2)

使用以下代码

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..

答案 1 :(得分:1)

在您的drawable文件夹中创建名为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的onTouch上启动和暂停图像动画。您可以通过点击按钮来更改其逻辑,例如启动和暂停。

文档:AnimationDrawable | Android Developers

试一试。希望有所帮助。

答案 2 :(得分:0)

您正在使用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时,它们在布局中的存在并没有消失,只是它们的可见性变得不可见。

我希望它有所帮助。