Ceci est un curseur d'image étonnant pour l'Android.
Vous pouvez facilement charger des images avec votre disposition personnalisée, et il existe de nombreux types d'animations incroyables que vous pouvez choisir.
implementation ' com.github.smarteist:autoimageslider:1.4.0 '
Si vous utilisez les bibliothèques AppCompat, utilisez celle-ci, mais veuillez migrer vers Androidx dès que vous le pouvez.
implementation ' com.github.smarteist:autoimageslider:1.4.0-appcompat '
Mettez d'abord la vue de curseur dans votre disposition XML:
< com .smarteist.autoimageslider.SliderView
android : id = " @+id/imageSlider "
android : layout_width = " match_parent "
android : layout_height = " 300dp "
app : sliderAnimationDuration = " 600 "
app : sliderAutoCycleDirection = " back_and_forth "
app : sliderAutoCycleEnabled = " true "
app : sliderIndicatorAnimationDuration = " 600 "
app : sliderIndicatorGravity = " center_horizontal|bottom "
app : sliderIndicatorMargin = " 15dp "
app : sliderIndicatorOrientation = " horizontal "
app : sliderIndicatorPadding = " 3dp "
app : sliderIndicatorRadius = " 2dp "
app : sliderIndicatorSelectedColor = " #5A5A5A "
app : sliderIndicatorUnselectedColor = " #FFF "
app : sliderScrollTimeInSec = " 1 "
app : sliderStartAutoCycle = " true " />
Ou vous pouvez le mettre à l'intérieur de la carte de carte pour être plus belle:
< androidx .cardview.widget.CardView
app : cardCornerRadius = " 6dp "
android : layout_margin = " 16dp "
android : layout_width = " match_parent "
android : layout_height = " wrap_content " >
< com .smarteist.autoimageslider.SliderView
android : id = " @+id/imageSlider "
android : layout_width = " match_parent "
android : layout_height = " 300dp "
app : sliderAnimationDuration = " 600 "
app : sliderAutoCycleDirection = " back_and_forth "
app : sliderAutoCycleEnabled = " true "
app : sliderIndicatorAnimationDuration = " 600 "
app : sliderIndicatorGravity = " center_horizontal|bottom "
app : sliderIndicatorMargin = " 15dp "
app : sliderIndicatorOrientation = " horizontal "
app : sliderIndicatorPadding = " 3dp "
app : sliderIndicatorRadius = " 2dp "
app : sliderIndicatorSelectedColor = " #5A5A5A "
app : sliderIndicatorUnselectedColor = " #FFF "
app : sliderScrollTimeInSec = " 1 "
app : sliderStartAutoCycle = " true " />
</ androidx .cardview.widget.CardView>
La nouvelle version nécessite un adaptateur de curseur plus votre disposition personnalisée pour les éléments de curseur, bien qu'il soit très similaire à Recyclerview & RecyclerAdapter, et il est familier et facile de mettre en œuvre cet adaptateur ... Voici un exemple de mise en œuvre de l'adaptateur:
public class SliderAdapterExample extends
SliderViewAdapter < SliderAdapterExample . SliderAdapterVH > {
private Context context ;
private List < SliderItem > mSliderItems = new ArrayList <>();
public SliderAdapterExample ( Context context ) {
this . context = context ;
}
public void renewItems ( List < SliderItem > sliderItems ) {
this . mSliderItems = sliderItems ;
notifyDataSetChanged ();
}
public void deleteItem ( int position ) {
this . mSliderItems . remove ( position );
notifyDataSetChanged ();
}
public void addItem ( SliderItem sliderItem ) {
this . mSliderItems . add ( sliderItem );
notifyDataSetChanged ();
}
@ Override
public SliderAdapterVH onCreateViewHolder ( ViewGroup parent ) {
View inflate = LayoutInflater . from ( parent . getContext ()). inflate ( R . layout . image_slider_layout_item , null );
return new SliderAdapterVH ( inflate );
}
@ Override
public void onBindViewHolder ( SliderAdapterVH viewHolder , final int position ) {
SliderItem sliderItem = mSliderItems . get ( position );
viewHolder . textViewDescription . setText ( sliderItem . getDescription ());
viewHolder . textViewDescription . setTextSize ( 16 );
viewHolder . textViewDescription . setTextColor ( Color . WHITE );
Glide . with ( viewHolder . itemView )
. load ( sliderItem . getImageUrl ())
. fitCenter ()
. into ( viewHolder . imageViewBackground );
viewHolder . itemView . setOnClickListener ( new View . OnClickListener () {
@ Override
public void onClick ( View v ) {
Toast . makeText ( context , "This is item in position " + position , Toast . LENGTH_SHORT ). show ();
}
});
}
@ Override
public int getCount () {
//slider view count could be dynamic size
return mSliderItems . size ();
}
class SliderAdapterVH extends SliderViewAdapter . ViewHolder {
View itemView ;
ImageView imageViewBackground ;
ImageView imageGifContainer ;
TextView textViewDescription ;
public SliderAdapterVH ( View itemView ) {
super ( itemView );
imageViewBackground = itemView . findViewById ( R . id . iv_auto_image_slider );
imageGifContainer = itemView . findViewById ( R . id . iv_gif_container );
textViewDescription = itemView . findViewById ( R . id . tv_auto_image_slider );
this . itemView = itemView ;
}
}
}
vous pouvez faire votre propre mise en page pour une vue de curseur
Voici un exemple de mise en œuvre de l'adaptateur:
<? xml version = " 1.0 " encoding = " utf-8 " ?>
< FrameLayout xmlns : android = " http://schemas.android.com/apk/res/android "
xmlns : tools = " http://schemas.android.com/tools "
android : layout_width = " match_parent "
android : layout_height = " match_parent "
android : orientation = " vertical " >
< ImageView
android : id = " @+id/iv_auto_image_slider "
android : layout_width = " match_parent "
android : layout_height = " match_parent "
android : scaleType = " fitXY " />
< ImageView
android : id = " @+id/iv_gif_container "
android : layout_width = " 80dp "
android : layout_height = " 80dp "
android : layout_gravity = " bottom|start "
android : layout_margin = " 50dp " />
< FrameLayout
android : id = " @+id/fl_shadow_container "
android : background = " @drawable/bg_overlay "
android : layout_width = " match_parent "
android : layout_height = " wrap_content "
android : layout_gravity = " bottom " >
< TextView
android : id = " @+id/tv_auto_image_slider "
android : layout_width = " match_parent "
android : layout_height = " wrap_content "
android : layout_marginTop = " 8dp "
android : layout_marginBottom = " 25dp "
android : padding = " 6dp "
android : textColor = " #FFF "
android : textSize = " 18sp " />
</ FrameLayout >
</ FrameLayout >
Après l'instanciation du SliderView (à l'intérieur de l'activité ou du fragment avec FindViewByid | BindView ...), définissez l'adaptateur sur le curseur.
SliderView sliderView = findViewById ( R . id . imageSlider );
sliderView . setSliderAdapter ( new SliderAdapterExample ( context ));
Vous pouvez appeler cette méthode si vous souhaitez commencer à retourner automatiquement et que vous pouvez également configurer l'animation du curseur:
sliderView . setIndicatorAnimation ( IndicatorAnimationType . WORM );
sliderView . setSliderTransformAnimation ( SliderAnimations . SIMPLETRANSFORMATION );
sliderView . startAutoCycle ();
Voici un exemple plus réaliste et plus complet:
@ Override
protected void onCreate ( Bundle savedInstanceState ) {
super . onCreate ( savedInstanceState );
setContentView ( R . layout . activity_main );
SliderView sliderView = findViewById ( R . id . imageSlider );
SliderAdapterExample adapter = new SliderAdapterExample ( this );
sliderView . setSliderAdapter ( adapter );
sliderView . setIndicatorAnimation ( IndicatorAnimationType . WORM ); //set indicator animation by using IndicatorAnimationType. :WORM or THIN_WORM or COLOR or DROP or FILL or NONE or SCALE or SCALE_DOWN or SLIDE and SWAP!!
sliderView . setSliderTransformAnimation ( SliderAnimations . SIMPLETRANSFORMATION );
sliderView . setAutoCycleDirection ( SliderView . AUTO_CYCLE_DIRECTION_BACK_AND_FORTH );
sliderView . setIndicatorSelectedColor ( Color . WHITE );
sliderView . setIndicatorUnselectedColor ( Color . GRAY );
sliderView . setScrollTimeInSec ( 4 ); //set scroll delay in seconds :
sliderView . startAutoCycle ();
}
Les suggestions et les demandes de traction sont toujours les bienvenues. Merci spécial [Roman Danylyk] (https://github.com/romandanylyk) pour un bel indicateur!
Copyright [2019] [Ali Hosseini]
Licencié sous la licence Apache, version 2.0; Vous ne pouvez pas utiliser ce fichier sauf conforme à la licence. Vous pouvez obtenir une copie de la licence à
http://www.apache.org/licenses/LICENSE-2.0
Sauf exiger la loi applicable ou convenu par écrit, les logiciels distribués en vertu de la licence sont distribués sur une base «tel quel», sans garantie ou conditions d'aucune sorte, expresse ou implicite. Voir la licence pour la langue spécifique régissant les autorisations et les limitations sous la licence.