适用于 android 的现代轮播库

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/22747339/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-20 06:24:40  来源:igfitidea点击:

Modern carousel library for android

androidcarousel

提问by ternes3

Is there any libraryavailable for Carousel animation of images?

是否有任何可用于图像轮播动画的

I found http://www.androidviews.net/2012/10/android-coverflow/; https://code.google.com/p/android-coverflow/but this library/snippet use extends gallay(Gallery class was deprecated in API level 16. (4.1.2)), so is there any (modern) library? Maybe in combination with picasso?

我找到了http://www.androidviews.net/2012/10/android-coverflow/https://code.google.com/p/android-coverflow/但是这个库/片段使用扩展了 gallay(画廊类在 API 级别 16. (4.1.2) 中被弃用),那么有任何(现代)库吗?也许与毕加索结合?

回答by Muhammad Nasir Shamshad

Here is the free link of CarouselViewGithub Linkand Android Arsenal

这里是CarouselView Github LinkAndroid阿森纳的免费链接

Gradle:

摇篮:

compile 'com.synnapps:carouselview:0.0.7'

Maven:

马文:

<dependency>
 <groupId>com.synnapps</groupId> 
 <artifactId>carouselview</artifactId>
 <version>0.0.7</version>
 <type>pom</type>
</dependency>

Usage:
Include following code in your layout:

用法:
在您的布局中包含以下代码:

<com.synnapps.carouselview.CarouselView
    android:id="@+id/carouselView"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    app:fillColor="#FFFFFFFF"
    app:pageColor="#00000000"
    app:radius="6dp"
    app:slideInterval="3000"
    app:strokeColor="#FF777777"
    app:strokeWidth="1dp"/>

Include following code in your activity:

在您的活动中包含以下代码:

public class SampleCarouselViewActivity extends AppCompatActivity {

CarouselView carouselView;

int[] sampleImages = {R.drawable.image_1, R.drawable.image_2, R.drawable.image_3, R.drawable.image_4, R.drawable.image_5};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sample_carousel_view);

    carouselView = (CarouselView) findViewById(R.id.carouselView);
    carouselView.setPageCount(sampleImages.length);

    carouselView.setImageListener(imageListener);
}

ImageListener imageListener = new ImageListener() {
    @Override
    public void setImageForPosition(int position, ImageView imageView) {
        imageView.setImageResource(sampleImages[position]);
    }
};

}

}

If you want to add custom view, implement ViewListener.

如果要添加自定义视图,请实现ViewListener。

public class SampleCarouselViewActivity extends AppCompatActivity {

CarouselView customCarouselView;
int NUMBER_OF_PAGES = 5;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sample_carousel_view);

    customCarouselView = (CarouselView) findViewById(R.id.customCarouselView);
    customCarouselView.setPageCount(NUMBER_OF_PAGES);
    // set ViewListener for custom view 
    customCarouselView.setViewListener(viewListener);
}

ViewListener viewListener = new ViewListener() {

    @Override
    public View setViewForPosition(int position) {
        View customView = getLayoutInflater().inflate(R.layout.view_custom, null);
        //set view attributes here

        return customView;
    }
};

For more information go to github link

有关更多信息,请访问 github 链接

回答by phantomraa

I haven't found any such library available when searching for it, but when making my own app and using a ViewPagerto display fragments, I've implemented my own class which implements ViewPager.PageTransformer.

我在搜索时没有找到任何这样的库,但是在制作我自己的应用程序并使用 aViewPager来显示片段时,我已经实现了我自己的类,它实现了ViewPager.PageTransformer.

Though you've asked for a library, I ran into a similar situation but ended up finding it easy enough to create my own class for it, so you may too. My guidance came from Using ViewPager for Screen Slidesin the Google Developer documentation. Here is my code:

尽管您要求使用 library,但我遇到了类似的情况,但最终发现为它创建自己的类很容易,所以您也可以。我的指导来自Google Developer 文档中的Using ViewPager for Screen Slides。这是我的代码:

public class CarouselPageTransformer implements ViewPager.PageTransformer {
    @Override
    public void transformPage(View page, float position) {
        float scaleFactor = 0.5f;
        float rotationFactor = 20;

        if (position < 0) {
            page.setRotationY(rotationFactor * -position);
            float scale = 1 + scaleFactor * position;
            page.setScaleX(scale);
            page.setScaleY(scale);

        } else {
            page.setRotationY(rotationFactor * -position);
            float scale = 1 - scaleFactor * position;
            page.setScaleX(scale);
            page.setScaleY(scale);
        }
    }
}

The activity hosting the transform then calls:

托管转换的活动然后调用:

viewPager.setPageTransformer(true, new CarouselPageTransformer());

viewPager.setPageTransformer(true, new CarouselPageTransformer());

This code positions the ViewPager's fragments to the sides of the visible screen, but you could just as easily position them to be visible, such as in the link you provided in your question.

此代码将ViewPager的片段定位到可见屏幕的两侧,但您可以轻松地将它们定位为可见,例如在您在问题中提供的链接中。

Be aware of the minimum SDK required; from the documentation for ViewPager.PageTransform:

请注意所需的最低 SDK;从文档中ViewPager.PageTransform

As property animation is only supported as of Android 3.0 and forward, setting a PageTransformer on a ViewPager on earlier platform versions will be ignored.

由于属性动画仅从 Android 3.0 开始支持,因此在早期平台版本上的 ViewPager 上设置 PageTransformer 将被忽略。

回答by Devenom

I have tried searching a lot for an alternative to Carousel. I finally found the perfect alternative.

我尝试了很多寻找 Carousel 的替代品。我终于找到了完美的替代品。

InfiniteCycleViewPager

InfiniteCycleViewPager

This does just what the Carousel library does.

这正是 Carousel 库所做的。

I modified it to load images from my SD card rather than Drawables.

我修改它以从我的 SD 卡而不是 Drawables 加载图像。

Works Perfectly fine.

工作得很好。

Contact me if you are still working on it and need any help.

如果您仍在处理它并需要任何帮助,请与我联系。

回答by Jaber

private void setImageToCaroussel(){

    imgUrls.add("https://im.idiva.com//content/2015/May/salon_ettiquette1.jpg");
    imgUrls.add("https://www.womenfitness.net/wp/wp-content/uploads/2018/04/What-to-look-for-when-choosing-a-hair-salon-1000x667.jpg");
    imgUrls.add("https://cdn.website.thryv.com/e3abe5c926184c4ca25389d43ae29913/dms3rep/multi/mobile/713b0a2.jpg");

    carouselView = (CarouselView) findViewById(R.id.carouselView);
    carouselView.setPageCount(imgUrls.size());

    carouselView.setImageListener(imageListener);

}
 ImageListener imageListener = new ImageListener() {
    @Override
    public void setImageForPosition(final int position, final ImageView imageView) {

        Glide.with(ShopActivity.this)
                .asBitmap()
                .load(imgUrls.get(position))
                .into(new CustomTarget<Bitmap>() {
                    @Override
                    public void onResourceReady(@Nullable Bitmap resource,@Nullable Transition<? super Bitmap> transition) {
                        imageView.setImageBitmap(resource);
                    }

                    @Override
                    public void onLoadCleared(@Nullable Drawable placeholder) {

                    }

                });
    }
};

回答by Asad

call setImageListenerbefore setPageCountwill resolve

setImageListener之前打电话setPageCount会解决