2015-09-19 2 views
0

Я хочу изменить 20 изображений внутри ImageView с таймером (задержка 1 секунда). Может кто-нибудь мне помочь? Я пробовал postdelayed runnable method, но мой Активность не работает нормально (раздавливается 2 из 10 кликов), когда я помещаю 17 изображений в свой xml-файл (17 ImageViews). Каждое изображение имеет максимальный размер 230 КБ. Может кто-нибудь помочь мне с помощью другого метода? Мой код слишком длинный, потому что я использую корпус коммутатора. Может ли кто-нибудь опубликовать какой-либо образец вашего кода, это действительно поможет. Благодарю.Измените изображения в ImageView с помощью таймера при нажатии кнопки

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 ImageViews. Например, я опубликовал только 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" /> 

+0

Пожалуйста, разместите связанную часть кода и аварийный логарифм. – hata

+0

Я думаю, что он выходит из строя из-за OutOfMemoryError, поскольку у вас есть 20 изображений ... –

+0

@HusseinElFeky, это первое, о чем я беспокоюсь, что я могу сделать? – Dre

ответ

1

Создайте файл с именем 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> 

Это будет перемешать ваш ImageView каждые 1 секунду, вы можете изменить продолжительность, если хотите, из атрибута 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; 
    } 
}); 

Теперь вы можете начать и приостановить изображения анимации onTouch из ImageView. Вы можете изменить свою логику, например, начать и приостановить ее нажатием кнопки onClick.

Документация: AnimationDrawable | Android Developers

Дайте ему попробовать. Надеюсь, это поможет.

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

Мне нужно поместить мои изображения в массив? или anim1 - это папка? – Dre

+0

да, вы должны поместить свое изображение в массив –

+0

У меня много ошибок. нет изображения для объявления? – Dre

0

Вы используете Visibility.GONE, чтобы скрыть ImageViews в вашем layout.xml (R.layout.activity_grade_four__place_value) и код Java (gradeFour_PlaceValue).

Я думаю, вы должны использовать visibility="invisible" в xml и images[n].setVisibility(View.INVISIBLE); в коде Java.

Поскольку Visibility.GONE означает, что вид отсутствует в макете.Таким образом, вы используете RelativeLayout в качестве родителя ViewGroup и ImageViews из числа двух до последнего, полагаются на свои позиции в первой ImageView (im1),

android:layout_alignBottom="@+id/im1" 

, что они не в состоянии определить свои позиции, когда первый ImageView отсутствует (Visibility.GONE).

Когда вы используете Visibility.INVISIBLE, их существование в макете не прошло, и их видимость стала невидимой.

Надеюсь, это поможет.

+0

Я попробую этого сэра. Спасибо! – Dre

Смежные вопросы