适用于 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
Modern carousel library for android
提问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 Link和 Android阿森纳的免费链接
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 ViewPager
to 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 的替代品。我终于找到了完美的替代品。
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 setImageListener
before setPageCount
will resolve
setImageListener
之前打电话setPageCount
会解决