【问题标题】:Android Viewpager as Image Slide GalleryAndroid Viewpager 作为图片幻灯片库
【发布时间】:2012-11-27 14:19:16
【问题描述】:

我正在使用 Jake 的 ViewPageIndicator 并希望像滑动图库一样显示图像。 我可以开始的任何参考链接。我已经实现了基本的 viewpager,现在想实现如下的 image viewpaper

使用ViewPageIndicator可以实现吗?

【问题讨论】:

    标签: android actionbarsherlock android-viewpager


    【解决方案1】:

    在 Jake 的 ViewPageIndicator 中,他实现了 View pager 以显示一个字符串数组(即 ["this","is","a","text"]),您将其从 YourAdapter.java(扩展 FragmentPagerAdapter)传递到 YourFragment.java,后者将视图返回给 viewpager。

    为了显示不同的内容,您只需更改传递的上下文类型。在这种情况下,您希望传递图像而不是文本,如下面的示例所示:

    这是您设置 Viewpager 的方式:

    public class PlaceDetailsFragment extends SherlockFragment {
        PlaceSlidesFragmentAdapter mAdapter;
        ViewPager mPager;
        PageIndicator mIndicator;
    
        public static final String TAG = "detailsFragment";
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.fragment_place_details,
                    container, false);
    
            mAdapter = new PlaceSlidesFragmentAdapter(getActivity()
                    .getSupportFragmentManager());
    
            mPager = (ViewPager) view.findViewById(R.id.pager);
            mPager.setAdapter(mAdapter);
    
            mIndicator = (CirclePageIndicator) view.findViewById(R.id.indicator);
            mIndicator.setViewPager(mPager);
            ((CirclePageIndicator) mIndicator).setSnap(true);
    
            mIndicator
                    .setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                        @Override
                        public void onPageSelected(int position) {
                            Toast.makeText(PlaceDetailsFragment.this.getActivity(),
                                    "Changed to page " + position,
                                    Toast.LENGTH_SHORT).show();
                        }
    
                        @Override
                        public void onPageScrolled(int position,
                                float positionOffset, int positionOffsetPixels) {
                        }
    
                        @Override
                        public void onPageScrollStateChanged(int state) {
                        }
                    });
            return view;
        }
    
    }
    

    your_layout.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
    
    
    
        <android.support.v4.view.ViewPager
            android:id="@+id/pager"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />
    
        <com.viewpagerindicator.CirclePageIndicator
            android:id="@+id/indicator"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:padding="10dip" />
    
    </LinearLayout>
    

    YourAdapter.java

    public class PlaceSlidesFragmentAdapter extends FragmentPagerAdapter implements
            IconPagerAdapter {
    
        private int[] Images = new int[] { R.drawable.photo1, R.drawable.photo2,
                R.drawable.photo3, R.drawable.photo4
    
        };
    
        protected static final int[] ICONS = new int[] { R.drawable.marker,
                R.drawable.marker, R.drawable.marker, R.drawable.marker };
    
        private int mCount = Images.length;
    
        public PlaceSlidesFragmentAdapter(FragmentManager fm) {
            super(fm);
        }
    
        @Override
        public Fragment getItem(int position) {
            return new PlaceSlideFragment(Images[position]);
        }
    
        @Override
        public int getCount() {
            return mCount;
        }
    
        @Override
        public int getIconResId(int index) {
            return ICONS[index % ICONS.length];
        }
    
        public void setCount(int count) {
            if (count > 0 && count <= 10) {
                mCount = count;
                notifyDataSetChanged();
            }
        }
    }
    

    YourFragment.java

    // 你需要从这里返回图片而不是文本。//

    public final class PlaceSlideFragment extends Fragment {
        int imageResourceId;
    
        public PlaceSlideFragment(int i) {
            imageResourceId = i;
        }
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
        }
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
    
            ImageView image = new ImageView(getActivity());
            image.setImageResource(imageResourceId);
    
            LinearLayout layout = new LinearLayout(getActivity());
            layout.setLayoutParams(new LayoutParams());
    
            layout.setGravity(Gravity.CENTER);
            layout.addView(image);
    
            return layout;
        }
    }
    

    你应该从上面的代码中得到一个像这样的 View pager。

    【讨论】:

    • 我已经尝试过您的代码,但图像未显示。怎么了??
    • 嗨,我也试过这个代码,我在刷卡时遇到了问题,因为图像寻呼机根本不起作用,它只刷父传呼机并且图像也没有显示,我做错了什么?跨度>
    • @mak_just4anything 看来您在视图寻呼机中使用了视图寻呼机。我尝试了几次,但无法使其工作。我所做的是有标签而不是片段的视图寻呼机。
    • 谢谢,但我尝试了其他方式,通过单独的查看器,这解决了我的问题,但它带来的另一个问题是旧片段留在寻呼机中,即使您更改了主选项卡。你知道在刷新 viewpager 适配器上删除碎片吗?
    • @mak_just4anything 查看这些链接stackoverflow.com/questions/7723964/…
    【解决方案2】:

    我做了一个名为AndroidImageSlider的库,你可以试试。

    【讨论】:

    • @daimajia 我想要在 SliderLayout 中简单的 viewpager 图像更改样式,它会减小输出图像的大小并增加前面图像的大小。我不希望这种大小的增加和减少,你能建议我怎样才能做到这一点吗?
    • @daimajia 我正在使用 AndroidImageSlider。它工作得很好。但问题是我想使缓存无效。当我更新正在显示的图像时。有没有办法做到这一点?
    • 上帝保佑你制作了这个图书馆。有史以来最好的用于制作图像滑块的库
    • @daimajia 我用过你的图书馆,非常棒。你能告诉我,如果我可以使用数字,而不是像 1 of 12 、 2 of 12 这样的指标
    【解决方案3】:

    Image Viewer with ViewPager Implementation,查看这个项目https://github.com/chiuki/android-swipe-image-viewer

    也参考这个讨论Swiping images (not layouts) with viewpager

    【讨论】:

    • 你能告诉我如何在图像中添加 onclick 监听器吗?我尝试添加到适配器,但它无法添加到适配器?
    • 这个项目的文档几乎为零。叹息。
    【解决方案4】:

    只需使用https://gist.github.com/8cbe094bb7a783e37ad1 使周围的页面可见,使用http://viewpagerindicator.com/ 作为指示器。太酷了,我正在用它来做画廊。

    【讨论】:

    • 你有一些示例应用程序正在实现它以便我可以参考它吗?
    • 我没有实现指标,但是在ViewPager 库实现中,您必须将整个代码复制到您的项目中,将instantiateItem 部分中的内容从 TextView 更改为您的 ImageView。
    【解决方案5】:

    Hoho.. 使用Gallery 应该很容易实现这一点,使用ViewPager 要困难得多。但我仍然鼓励使用 ViewPager,因为 Gallery 确实有很多问题,并且自 android 4.2 以来已被弃用。

    在 PagerAdapter 中有一个方法 getPageWidth() 来控制页面大小,但只有这样你才能达到你的目标。

    尝试阅读以下 2 篇文章寻求帮助。

    multiple-view-viewpager-options

    viewpager-container

    【讨论】:

      【解决方案6】:

      您可以使用自定义画廊控制.. 检查此https://github.com/kilaka/ImageViewZoom 从此使用galleryTouch类..

      【讨论】:

      • 有什么办法可以让我有一个指标吗?还是你告诉我从项目中获取参考?
      • 加载图像作为延迟加载并放置一个占位符图像..它会在加载图像之前显示占位符图像..
      【解决方案7】:

      您好,如果您正在寻找带有圆形指示器的简单 android 图像滑动,您可以从这里下载完整代码 http://javaant.com/viewpager-with-circle-indicator-in-android/#.VysQQRV96Hs。请查看现场演示,这将给出清晰的想法。

      【讨论】:

        【解决方案8】:
        enter code here   public Timer timer;
        public TimerTask task;
        public ImageView slidingimage;
        
        private int[] IMAGE_IDS = {
                R.drawable.home_banner1, R.drawable.home_banner2, R.drawable.home_banner3
            };
        
        enter code here   @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_home_screen);
        
             final Handler mHandler = new Handler();
        
                // Create runnable for posting
                final Runnable mUpdateResults = new Runnable() {
                    public void run() {
        
                        AnimateandSlideShow();
        
                    }
                };
                int delay = 2000; // delay for 1 sec.
        
                int period = 2000; // repeat every 4 sec.
        
                Timer timer = new Timer();
        
                timer.scheduleAtFixedRate(new TimerTask() {
        
                public void run() {
        
                     mHandler.post(mUpdateResults);
        
                }
        
                }, delay, period);
        
        enter code here     private void AnimateandSlideShow() {
        
                slidingimage = (ImageView)findViewById(R.id.banner);
                slidingimage.setImageResource(IMAGE_IDS[currentimageindex%IMAGE_IDS.length]);
        
                currentimageindex++;
        
                Animation rotateimage = AnimationUtils.loadAnimation(this, R.anim.custom_anim);
        
                  slidingimage.startAnimation(rotateimage);
        
            }
        

        【讨论】:

          【解决方案9】:

          一个很棒的 One Image 滑块:https://github.com/daimajia/AndroidImageSlider 检查它

          【讨论】:

          • @Programmingvirus 我在他之前分享了它;):p
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-28
          • 1970-01-01
          • 2011-03-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多