【问题标题】:I've created a slideshow using ViewPager, need to make a 3 small changes but stuck我使用 ViewPager 创建了一个幻灯片,需要进行 3 次小改动但卡住了
【发布时间】:2014-04-22 22:38:48
【问题描述】:

我想创建一个简单的幻灯片。我已经走得很远了,但现在我被困住了,我敢肯定我的问题对你们来说听起来很简单,因此我在这里寻求帮助:-) 我已经努力了,源代码如下。

我坚持的改变

  1. 我希望幻灯片的图像填满屏幕
  2. 我也不希望用户必须拖动图像,我只想让他点击图像,然后它会转到下一个。
  3. 当幻灯片结束时(到达最后一项,一个 toast 消息告诉用户它已完成)

我已尝试执行上述操作,但就像我说的那样。我对这一切都很陌生

ImagePager:

public class ImagePager extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ImagePagerAdapter adapter = new ImagePagerAdapter(this, imageArra );
        ViewPager myPager = (ViewPager) findViewById(R.id.myimagepager);
        myPager.setAdapter(adapter);
        myPager.setCurrentItem(0);
        }


    private int imageArra[] = { R.drawable.one, R.drawable.two, R.drawable.three, R.drawable.four, 
                                R.drawable.five,R.drawable.six, R.drawable.seven, R.drawable.eight,
                                R.drawable.nine,R.drawable.ten,R.drawable.eleven, R.drawable.twelve,

                                };

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.myimage);             
        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.slide, 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.demo.SETTING");
        startActivity(p);
    break;
    }

return false;
}
   }

幻灯片:

public class Slide extends Activity {   
    public int currentimageindex=0;
    Timer timer;
    TimerTask task;
    ImageView slidingimage;

    private int[] IMAGE_IDS = {
            R.drawable.one, R.drawable.two, R.drawable.three,
            R.drawable.four, R.drawable.five, R.drawable.six,
            R.drawable.seven, R.drawable.eight, R.drawable.nine,
            R.drawable.ten, R.drawable.eleven, R.drawable.twelve,

            };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        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_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_one == true) {   
        slidingimage = (ImageView)findViewById(R.id.slide_image);
        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.slide_image);
        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.slide_image);
        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.slide_image);
        slidingimage.setImageResource(IMAGE_IDS[currentimageindex%IMAGE_IDS.length]);       
        currentimageindex++;        
        Animation rotateimage = AnimationUtils.loadAnimation(this, R.anim.move);        
          slidingimage.startAnimation(rotateimage);   

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

    }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);                                     
        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.slide, 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.demo.SETTING");
            startActivity(p);
        break;
        }

    return false; 
    }
             }

设置:

public class Setting extends PreferenceActivity {

    CheckBoxPreference animation_one;
    CheckBoxPreference animation_two;
    CheckBoxPreference animation_three;
    CheckBoxPreference animation_four;
    CheckBoxPreference animation_five;

    @SuppressWarnings("deprecation")
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.setting);

        animation_one = (CheckBoxPreference) findPreference("animation_one");
        animation_two = (CheckBoxPreference) findPreference("animation_two");       
        animation_three = (CheckBoxPreference) findPreference("animation_three");
        animation_four = (CheckBoxPreference) findPreference("animation_four");
        animation_five = (CheckBoxPreference) findPreference("animation_five");


        animation_one.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
                        @Override
                        public boolean onPreferenceChange(Preference preference,
                                Object newValue) {
                            // TODO Auto-generated method stub

                            animation_one.setChecked(true);
                            animation_two.setChecked(false);
                            animation_three.setChecked(false);
                            animation_four.setChecked(false);
                            animation_five.setChecked(false);

                            return true;
                        }

                    });         
        animation_two.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
                        @Override
                        public boolean onPreferenceChange(Preference preference,
                                Object newValue) {
                            // TODO Auto-generated method stub

                            animation_one.setChecked(false);
                            animation_two.setChecked(true);
                            animation_three.setChecked(false);
                            animation_four.setChecked(false);
                            animation_five.setChecked(false);

                            return true;

                        }

                    });         
                            /////
                            animation_three.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
                                @Override
                                public boolean onPreferenceChange(Preference preference,
                                        Object newValue) {
                                    // TODO Auto-generated method stub

                                    animation_one.setChecked(false);
                                    animation_two.setChecked(false);
                                    animation_three.setChecked(true);
                                    animation_four.setChecked(false);
                                    animation_five.setChecked(false);

                                    return true;
                                }

                            });       
                    animation_four.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
                                @Override
                                public boolean onPreferenceChange(Preference preference,
                                        Object newValue) {
                                    // TODO Auto-generated method stub

                                    animation_one.setChecked(false);
                                    animation_two.setChecked(false);
                                    animation_three.setChecked(false);
                                    animation_four.setChecked(true);
                                    animation_five.setChecked(false);

                                    return true;
                                }

                            });       

                            animation_five.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
                                @Override
                                public boolean onPreferenceChange(Preference preference,
                                        Object newValue) {
                                    // TODO Auto-generated method stub

                                    animation_one.setChecked(false);
                                    animation_two.setChecked(false);
                                    animation_three.setChecked(false);
                                    animation_four.setChecked(false);
                                    animation_five.setChecked(true);

                                    return true;
                                }

                            });       

           }
         }

【问题讨论】:

    标签: java android xml eclipse android-layout


    【解决方案1】:

    似乎您试图做的是捕获一个触摸事件,该事件将分页到下一个项目而没有实际“滚动”,这与 ViewPager 的工作方式相反。 ViewPager 通常会设置有 Fragment 和 FragmentStatePagerAdapter,以便在滚动时在 Fragment 之间切换。

    如果您希望能够在没有片段的情况下来回滚动,则需要为视图寻呼机分配一个 OnPageChangeListener 并在处理事件时将该接口内的事件回调处理到 viewPager.setSelectedItem(intPostion)。 (由于捕捉触摸事件、速度等的物理特性,这可能会变得复杂)

    对于您的幻灯片示例,我根本不会使用视图寻呼机,而是有一个带有左右两个按钮的活动,以及一个容器布局,当单击按钮时将切换出各种片段(以及播放所有很酷的动画之间)。

    要实现这一点,您需要将可绘制引用或图像存储在某种类型的数组或 ArrayList 中,以跟踪当前位置。此外,如果有要切换的项目,您还需要检查左右按钮,以便仅转到下一个/上一个项目。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-23
      • 2013-07-28
      • 1970-01-01
      相关资源
      最近更新 更多