1

私はlistactivity多くの行を形成するアプリを持っています.1行は画像スライドショーです.行をクリックするとアクティビティが表示されますImageView.また、1つの項目のオプションメニュー(スライドショーアニメーション設定)があり、クリックすると複数のチェックボックス設定アニメーション画面が開きます.チェックボックスはそれぞれ異なるアニメーションを画像スライドショーに適用します。ユーザーは、チェックボックスアニメーション名をチェックするか、すべてのチェックボックスをオフにして、スライドショーアクティビティがビューページパターンで画像を表示する必要がある場合に、利用可能な多くのアニメーションを含む画像をスライドするかどうかを決定します。

android:defaultValue="true"フェードイン アニメーションである最初のアニメーション。しかし:スライドショーアクティビティを開くと、imagepagerパターンで画像が開き、fade_inチェックボックスを無視します。 android:defaultValue="true"

次に、設定画面に移動して別のアニメーションを選択し、スライドショーアクティビティに戻った後、新しいアニメーションが適用されません。ページャーでスクロールされたすべての画像が終了するまで戻るボタンを何度も押す必要があり、次のアニメーションが適用される場合があります。画像ページャーとフリーズで動かなくなった場合、通常の動作では、スライドショーに戻るボタンを押すと次のアニメーションが適用されます。

別のことは、画像viewpagerパターンでスクロールすると、いくつかの画像がスクロールされてから最初の画像に戻り、次に画像が再びスクロールされ、突然最初の画像に戻ります。

プロジェクト全体はここからダウンロードできます

どんな助けでも大歓迎です。

SlideShow.java

public class SlideShow extends Activity {

public int currentimageindex=0;
Timer timer;
TimerTask task;
ImageView slidingimage;

  private int[] IMAGE_IDS = {
        R.drawable.day_one_1, R.drawable.day_one_2, R.drawable.day_one_3,
        R.drawable.day_one_4, R.drawable.day_one_5, R.drawable.day_one_6,
        R.drawable.day_one_7, R.drawable.day_one_8, R.drawable.day_one_9,
        R.drawable.day_one_10, R.drawable.day_one_11, R.drawable.day_one_12,
        R.drawable.day_one_13, R.drawable.day_one_14, R.drawable.day_one_15,
        R.drawable.day_one_16,R.drawable.day_one_17,R.drawable.day_one_18, 
        R.drawable.day_one_19,R.drawable.day_one_20  
        };

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.slide);
    final Handler mHandler = new Handler();
 // Create runnable for posting
    final Runnable mUpdateResults = new Runnable() {
        public void run() {

            AnimateandSlideShow();              
        }
    };

    int delay = 1000; // delay for 1 sec.

    int period = 8000; // repeat every 4 sec.

    Timer timer = new Timer();

    timer.scheduleAtFixedRate(new TimerTask() {

    public void run() {

         mHandler.post(mUpdateResults);
    }

    }, delay, period);             

}      

private void AnimateandSlideShow() {

    SharedPreferences getPrefs = PreferenceManager
            .getDefaultSharedPreferences(getBaseContext());

    boolean animation = getPrefs.getBoolean("animation", true);             
    boolean animation_one = getPrefs.getBoolean("animation_one", false);
    boolean animation_two = getPrefs.getBoolean("animation_two", false);    
    boolean animation_three = getPrefs.getBoolean("animation_three", false);
    boolean animation_four = getPrefs.getBoolean("animation_four", false);
    boolean animation_five = getPrefs.getBoolean("animation_five", false);              

 if (animation == true) {   
    slidingimage = (ImageView)findViewById(R.id.ImageView_slide);
    slidingimage.setImageResource(IMAGE_IDS[currentimageindex%IMAGE_IDS.length]);       
    currentimageindex++;
    Animation rotateimage = AnimationUtils.loadAnimation(this, R.anim.custom_anim);               
      slidingimage.startAnimation(rotateimage);   

}else if(animation_one == true) {
    slidingimage = (ImageView)findViewById(R.id.ImageView_slide);
    slidingimage.setImageResource(IMAGE_IDS[currentimageindex%IMAGE_IDS.length]);       
    currentimageindex++;        
    Animation rotateimage = AnimationUtils.loadAnimation(this, R.anim.fade_in);        
      slidingimage.startAnimation(rotateimage);   

}else if (animation_two == true) {
    slidingimage = (ImageView)findViewById(R.id.ImageView_slide);
    slidingimage.setImageResource(IMAGE_IDS[currentimageindex%IMAGE_IDS.length]);       
    currentimageindex++;
    Animation rotateimage = AnimationUtils.loadAnimation(this, R.anim.fade_out);       
      slidingimage.startAnimation(rotateimage);  

}else if (animation_three == true) {
    slidingimage = (ImageView)findViewById(R.id.ImageView_slide);
    slidingimage.setImageResource(IMAGE_IDS[currentimageindex%IMAGE_IDS.length]);       
    currentimageindex++;
    Animation rotateimage = AnimationUtils.loadAnimation(this, R.anim.bounce);       
      slidingimage.startAnimation(rotateimage);  

}else if(animation_four == true) {
    slidingimage = (ImageView)findViewById(R.id.ImageView_slide);
    slidingimage.setImageResource(IMAGE_IDS[currentimageindex%IMAGE_IDS.length]);       
    currentimageindex++;        
    Animation rotateimage = AnimationUtils.loadAnimation(this, R.anim.fade_in_2);        
      slidingimage.startAnimation(rotateimage);   

}else if (animation_five == true) {
    slidingimage = (ImageView)findViewById(R.id.ImageView_slide);
    slidingimage.setImageResource(IMAGE_IDS[currentimageindex%IMAGE_IDS.length]);       
    currentimageindex++;
    Animation rotateimage = AnimationUtils.loadAnimation(this, R.anim.flip);       
      slidingimage.startAnimation(rotateimage);  


}else if(animation == false && animation_one == false && animation_two == false){
    Intent intent = new Intent(SlideShow.this, ImagePager.class);                                     
    startActivity(intent);

}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
    }

   @Override
public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub
    switch (item.getItemId()) {

    case R.id.action_settings:
        Intent p = new Intent("com.test.test.SETTING");
        startActivity(p);
    break;
    }

return false; 
}
   }

ImagePager.java

  public class ImagePager extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.pager);

    ImagePagerAdapter adapter = new ImagePagerAdapter(this, imageArra);
    ViewPager myPager = (ViewPager) findViewById(R.id.myimagepager);
    myPager.setAdapter(adapter);
    myPager.setCurrentItem(0);
}

     private int imageArra[] = { R.drawable.day_one_1, R.drawable.day_one_2, R.drawable.day_one_3,
        R.drawable.day_one_4, R.drawable.day_one_5, R.drawable.day_one_6,
        R.drawable.day_one_7, R.drawable.day_one_8, R.drawable.day_one_9,
        R.drawable.day_one_10, R.drawable.day_one_11, R.drawable.day_one_12,
        R.drawable.day_one_13, R.drawable.day_one_14, R.drawable.day_one_15,
        R.drawable.day_one_16,R.drawable.day_one_17,R.drawable.day_one_18, 
        R.drawable.day_one_19,R.drawable.day_one_20  

    };

public class ImagePagerAdapter extends PagerAdapter {   
    Activity activity;
    int[] imageArray;

    public ImagePagerAdapter(Activity act, int[] imgArra) {
        imageArray = imgArra;
        activity = act;   
        }

    public int getCount() {
        return imageArray.length;   
        }

    public Object instantiateItem(View collection, int position) {
        LayoutInflater inflater = (LayoutInflater)collection.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View layout = inflater.inflate(R.layout.custom_pager, null);   

        ImageView im=(ImageView) layout.findViewById(R.id.pager_imageView);

        im.setImageResource(imageArray[position]);

        ((ViewPager) collection).addView(layout, 0);
           return layout;   
           }

    @Override
    public void destroyItem(View arg0, int arg1, Object arg2) {
        ((ViewPager) arg0).removeView((View) arg2);   
        }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        return arg0 == ((View) arg1);   
        }

    @Override
    public Parcelable saveState() {
        return null; 
        }
    } 
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
    }

   @Override
public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub
    switch (item.getItemId()) {

    case R.id.action_settings:
        Intent p = new Intent("com.test.test.SETTING");
        startActivity(p);
    break;
    }

return false;
}
   } 
4

1 に答える 1

0

これを使用してみて、適切な解決策を見つけるためにプロジェクトを投稿してください

まず、 をImageView slidingimage;インスタンス変数として宣言し たので、 をインスタンス変数として宣言し、次のAnimation rotateimageように使用します。

 rotateimage = AnimationUtils.loadAnimation(this, R.anim.custom_anim);  

アニメーションを imageview に追加しinvalidate()たら、if ループ内でメソッドを呼び出します

slidingimage.startAnimation(rotateimage)
slidingimage.invalidate();

そして、imagePagerクラスViewPager myPagerで静的インスタンス変数として作成private static ViewPager myPagerし、このコードをクラスに追加します

public static void refreshPager(){
    if(myPager != null)
        myPager.invalidate();
}

そして、あなたのsettingsクラスでは、onBackPressed()イベントでこのメソッドを呼び出します

@Override
public void onBackPressed() {
    ImagePager.refreshPager();
    super.onBackPressed();
}

編集

あなたがする必要があるのはこれだけです。このコードをSlide.javaファイルの前後setContentView(R.layout.main);に追加してくださいfinal Handler mHandler = new Handler();

SharedPreferences getPrefs = PreferenceManager
            .getDefaultSharedPreferences(getBaseContext());
    if(getPrefs.getBoolean("Initialization", false) == false){
         SharedPreferences.Editor edit = getPrefs.edit();
         edit.putBoolean("animation_one", true);
         edit.putBoolean("Initialization", true);
         edit.commit();
    }

このような

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    SharedPreferences getPrefs = PreferenceManager
            .getDefaultSharedPreferences(getBaseContext());
    if(getPrefs.getBoolean("Initialization", false) == false){
         SharedPreferences.Editor edit = getPrefs.edit();
         edit.putBoolean("animation_one", true);
         edit.putBoolean("Initialization", true);
         edit.commit();
    }
    final Handler mHandler = new Handler();
 // Create runnable for posting
    final Runnable mUpdateResults = new Runnable() {
        public void run() {

            AnimateandSlideShow();              
        }
    };

    int delay = 1000; // delay for 1 sec.

    int period = 8000; // repeat every 4 sec.

    Timer timer = new Timer

    // Some more code............

設定ファイルが作成されただけではありません;)

EDIT 2Slide.javaファイルで、このようなブール値を宣言し ます

public boolean loaded ;

このような場合は、elseをコーディングします

else if(animation_one == false && animation_two == false && animation_three == false 
        && animation_four == false && animation_five == false){
    Intent intent = new Intent(Slide.this, ImagePager.class);  
    if(loaded)
    startActivity(intent);
    loaded = true;
}

Slide.javapublic static TimerTask タスクで静的変数を作成します。そして、このコードをこのようなメソッドにImagePager.java追加しますif(imageArra.length-1 == position)Slide.task.cancel();instantiateItem()

    public Object instantiateItem(View collection, int position) {
    LayoutInflater inflater = (LayoutInflater)collection.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View layout = inflater.inflate(R.layout.custom_pager, null);   

    ImageView im=(ImageView) layout.findViewById(R.id.myimage);             
    im.setImageResource(imageArray[position]);

    ((ViewPager) collection).addView(layout, 0);
    if(imageArra.length-1 == position)
        Slide.task.cancel();
       return layout;   
       }

これがうまくいくことを願っています

于 2013-08-28T06:16:29.043 に答える