Git Product home page Git Product logo

banner-slider's Introduction

Deprecated

I created this project in 2016. many things have changed and there are many other new great alternatives for creating sliders in android. so I decided to deprecate banner-slider.

Banner-Slider

Banner slider is an easy to use library for making beautiful sliders in your android app.

How to download

Gradle

add this line to your module build.gradle dependecies block:

compile 'com.ss.bannerslider:bannerslider:2.0.0'

Maven

<dependency>
  <groupId>com.ss.bannerslider</groupId>
  <artifactId>bannerslider</artifactId>
  <version>2.0.0</version>
  <type>pom</type>
</dependency>

How use this library

XML

<ss.com.bannerslider.Slider
   android:id="@+id/banner_slider1"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   />

Java

Step 1: extend SliderAdapter

in first step you must create an adapter to adapt your data model with slides. example implemented adapter with 3 slides:

public class MainSliderAdapter extends SliderAdapter {

    @Override
    public int getItemCount() {
        return 3;
    }

    @Override
    public void onBindImageSlide(int position, ImageSlideViewHolder viewHolder) {
        switch (position) {
            case 0:
                viewHolder.bindImageSlide("https://assets.materialup.com/uploads/dcc07ea4-845a-463b-b5f0-4696574da5ed/preview.jpg");
                break;
            case 1:
                viewHolder.bindImageSlide("https://assets.materialup.com/uploads/20ded50d-cc85-4e72-9ce3-452671cf7a6d/preview.jpg");
                break;
            case 2:
                viewHolder.bindImageSlide("https://assets.materialup.com/uploads/76d63bbc-54a1-450a-a462-d90056be881b/preview.png");
                break;
        }
    }
}

Step 2: specify your image loading service

you must specify image loading service for loading images(for better flexibility and prevent adding unnecessary libraries). for example if you work with picasso for loading images in your project, you must implement ImageLoadingService interface like below:

public class PicassoImageLoadingService implements ImageLoadingService {
    public Context context;

    public PicassoImageLoadingService(Context context) {
        this.context = context;
    }

    @Override
    public void loadImage(String url, ImageView imageView) {
        Picasso.with(context).load(url).into(imageView);
    }

    @Override
    public void loadImage(int resource, ImageView imageView) {
        Picasso.with(context).load(resource).into(imageView);
    }

    @Override
    public void loadImage(String url, int placeHolder, int errorDrawable, ImageView imageView) {
        Picasso.with(context).load(url).placeholder(placeHolder).error(errorDrawable).into(imageView);
    }
}

Step 3: initialize slider in your Application class

Slider.init(YOUR IMAGE LOADING SERVICE);

Step 4: set your adapter on slider

slider = findViewById(R.id.banner_slider1);
        slider.setAdapter(new MainSliderAdapter());

You want more customization?

Changing slides automatically in specifed periods

interval attribute get miliseconds.

  app:slider_interval="5000"

Loop slides

  app:slider_loopSlides="true"

Choose default banner to show up first

slider.setSelectedSlide(2);

you must pass banner position to it:

  app:slider_defaultBanner="1"

Enable/disable indicators animations

in default, animations are enabled

  app:slider_animateIndicators="true"

Use custom Indicators

if you also set default indicators, then this attributes will ignored

  app:slider_selectedSlideIndicator="@drawable/selected_slide_indicator"
  app:slider_unselectedSlideIndicator="@drawable/unselected_slide_indicator"

How set empty view, when banners not received from server yet?

  app:slider_emptyView="@layout/layout_empty_view"

Change indicator sizes

  app:slider_indicatorSize="12dp"

Set OnBannerClickListener

slider.setOnSlideClickListener(new OnSlideClickListener() {
            @Override
            public void onSlideClick(int position) {
                //Do what you want
            }
        });
  });

Licence

Copyright 2016 Saeed Shahini

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Author

Saeed shahini

email: [email protected]

github: https://github.com/saeedsh92

banner-slider's People

Contributors

saeedsh92 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

banner-slider's Issues

parseCustomAttributes error

thanks for your good library

but i have problem with that

  1. when activity lunched write parseCustomAttributes error in log cat !!!
    i load local drawable

  2. how can i used picasso library in banner slider

android.widget.ImageView cannot be cast to android.view.ViewGroup (CustomViewPager.java:33)

Just setting up a banner-slider with a few ImageViews loaded with Picasso and I get:

Relevant exception trace:

Fatal Exception: java.lang.ClassCastException
android.widget.ImageView cannot be cast to android.view.ViewGroup
 Raw Text
android.support.v4.app.FragmentTransition.configureTransitionsUnoptimized (FragmentTransition.java:284)
android.support.v4.view.ViewPager.onMeasure (ViewPager.java:1642)
ss.com.bannerslider.views.CustomViewPager.onMeasure (CustomViewPager.java:33)

Any clues?

Full Stacktrace

Fatal Exception: java.lang.ClassCastException: android.widget.ImageView cannot be cast to android.view.ViewGroup
       at android.support.v4.app.FragmentTransition.configureTransitionsUnoptimized(FragmentTransition.java:284)
       at android.support.v4.app.FragmentTransition.startTransitions(FragmentTransition.java:113)
       at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2143)
       at android.support.v4.app.FragmentManagerImpl.optimizeAndExecuteOps(FragmentManager.java:2098)
       at android.support.v4.app.FragmentManagerImpl.execSingleAction(FragmentManager.java:1979)
       at android.support.v4.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:626)
       at android.support.v4.app.FragmentStatePagerAdapter.finishUpdate(FragmentStatePagerAdapter.java:166)
       at android.support.v4.view.ViewPager.populate(ViewPager.java:1268)
       at android.support.v4.view.ViewPager.populate(ViewPager.java:1116)
       at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1642)
       at ss.com.bannerslider.views.CustomViewPager.onMeasure(CustomViewPager.java:33)
       at android.view.View.measure(View.java:18805)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
       at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
       at android.view.View.measure(View.java:18805)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
       at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
       at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
       at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
       at android.view.View.measure(View.java:18805)
       at android.support.v4.widget.NestedScrollView.measureChildWithMargins(NestedScrollView.java:1420)
       at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
       at android.support.v4.widget.NestedScrollView.onMeasure(NestedScrollView.java:482)
       at android.view.View.measure(View.java:18805)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
       at android.support.design.widget.CoordinatorLayout.onMeasureChild(CoordinatorLayout.java:714)
       at android.support.design.widget.CoordinatorLayout.onMeasure(CoordinatorLayout.java:786)
       at android.view.View.measure(View.java:18805)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
       at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
       at android.view.View.measure(View.java:18805)
       at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:716)
       at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:462)
       at android.view.View.measure(View.java:18805)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
       at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
       at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:139)
       at android.view.View.measure(View.java:18805)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
       at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
       at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
       at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
       at android.view.View.measure(View.java:18805)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
       at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
       at android.view.View.measure(View.java:18805)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
       at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
       at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
       at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
       at android.view.View.measure(View.java:18805)
       at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5952)
       at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
       at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2643)
       at android.view.View.measure(View.java:18805)
       at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2100)
       at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1216)
       at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1452)
       at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
       at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)
       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
       at android.view.Choreographer.doCallbacks(Choreographer.java:670)
       at android.view.Choreographer.doFrame(Choreographer.java:606)
       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
       at android.os.Handler.handleCallback(Handler.java:739)
       at android.os.Handler.dispatchMessage(Handler.java:95)
       at android.os.Looper.loop(Looper.java:148)
       at android.app.ActivityThread.main(ActivityThread.java:5417)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

banner on click

hi everyone
i wanna create on click for banner to open activity, is it possible?

درخواست تغییر

با سلام
مهندس یه زحمت بکش این امکان رو هم بزار که بشه به جای اینکه از نت یا عکس داخل برنامه استفاده کنه بشه از داخل رم گوشی هم عکس رو نمایش داد. یا عکس های موجود در مسیر پوشه برنامه

NullPointerException

Attempt to invoke virtual method 'void ss.com.bannerslider.views.SlideIndicatorsGroup.removeAllViews()'

OnScrollChangeListener

how can i find that Slider move to next Image
is there anyway to find out Position changed ?

  imageSlider.setOnBannerClickListener(new OnBannerClickListener() {
            @Override
            public void onClick(int position) {

            }
        });

its OnBannerClickListener
i need OnBannerPositionChangeListener

How to make slider infinite?

First of all great slider library..
i m sliding manually when we reach last index, it should be slide to first index, is it possible...?

Crashes on Android 8+

The library crashes on Android 8 when you move forward maybe due to big parcels when instance state is saved.

There is an error like that :android.os.TransactionTooLargeException: data parcel size 20195964 bytes:

Anyone else face the same on SDK 25?

BannerSlider in RecyclerView

I put several BannerSlider into a RecyclerView

When loading the activity and the moment I do not scroll, each bannerslider displays the good pictures I assigned to him.
As soon as I scroll, it's a mess. bannerslider disappear or others that contain a mixture of pictures of the existing and other bannerslider

An idea how to correct this?

auto slide bug

Sometimes the auto slide passes fast and slow images, you should also disable the slide if there is an interaction with the user

کش تصاویر - لودینگ

بی زحمت یه بررسی بکنید این
emptyView
درست کار میکنه یا نه . چون قاعدتا باید وقتی اسلاید هنوز تصویرش دانلود نشده این ویو نشون داده بشه دیگه ؟ ولی مثل این که الان اینطوری نیست

یه مورد دیگه هم اگه تصاویر کش بشه خیلی عالی میشه.

how to fit image in slider.

Hello saeedsh92,
Thanks for awesome library,
I use this library in my android app for banner. but i have an issue regarding image size.
The size of images are different and they cropped from bottom. please help me to solve this problem.
how do i set these images like fitCenter, centerCrop, fitXY etc.

Thanks in advance.

No view found for id 0x3 (unknown) for fragment BannerFragment

I am using this banner into a fragment. First it works great but when i open my sliding menu and go another fragment and come back again it shows error
java.lang.IllegalArgumentException: No view found for id 0x3 (unknown) for fragment BannerFragment{6f4a71d #12 id=0x3}

any one facing this issue??

Fragment Support

Hi. I came across this lib and it is simply amazing.
One thing though. Wanted to use it on a fragment instead.
Please help.
Thanks!!

emptyView!

Thank you for this great lib.

Is there any way to override and customize the emptyView programmatically?
For instance, if I want to load an image using Picasso lib in that empty layout, how can i reach that?

تشکر

این کتابخونه فوق العادست ممنون از زحمات شما

Hide Indicators does not work

Hi there nice library but I encounter this problem. When I add app:hideIndicators="true" to the view or use if I use bannerSlider.setHideIndicators(true); the app crashes.

java.lang.NullPointerException at ss.com.bannerslider.views.BannerSlider.setBanners(BannerSlider.java:188) at ss.com.bannerslider.views.BannerSlider.renderRemainingBanners(BannerSlider.java:207) at ss.com.bannerslider.views.BannerSlider.access$1100(BannerSlider.java:37) at ss.com.bannerslider.views.BannerSlider$1.run(BannerSlider.java:147) at android.os.Handler.handleCallback(Handler.java:730) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5103) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) at dalvik.system.NativeStart.main(Native Method)

Nullpointer getting current slide position

When you try to get slide position when viewPager is not ready, it throws a null pointer exception. Maybe we should ask if viewPager is null before sending slide position as you do in other parts of the code.

problem in collapsing toolbarlayout

when use this slider inside CollapsingToolbarLayout this error run:

Host activity must extend AppCompatActivity

java.lang.RuntimeException: **# Host activity must extend AppCompatActivity** at ss.com.bannerslider.views.BannerSlider$1.run(BannerSlider.java:117) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

Problem with Image in Fragment

Hi, In an activity does not fail the application, But in a fragment with the same image it fails.
I leave my code.

public class FragmentTabsMenuTienda extends Fragment {

View rootView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    rootView = inflater.inflate(R.layout.fragment_inicio_main_tips, container, false);
    return rootView;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    setRetainInstance(false);

    BannerSlider bannerSlider = (BannerSlider)rootView.findViewById(R.id.banner_slider1);
    //bannerSlider.addBanner(new RemoteBanner("http://mt5.tuvotacion.com:81/imagenes_unicas/cual-perrito-es-mas-tierno-450089.jpg"));
    //bannerSlider.addBanner(new DrawableBanner(R.drawable.fondo1));
    bannerSlider.addBanner(new DrawableBanner(R.drawable.preview));

    bannerSlider.setOnBannerClickListener(new OnBannerClickListener() {
        @Override
        public void onClick(int position) {
            Toast.makeText(getActivity(), "Banner with position " + String.valueOf(position) + " clicked!", Toast.LENGTH_SHORT).show();
        }
    });

}

Slider skipping images

Hi. I just stubled upon your slider and is amazing.

Although I find some issues.

The slider skips some images when sliding, more specifically 1 image on each autoslide.

Also, there are some memory leaks.

P.S. I'm using the slider inside a Fragment.

Multiple timer problem

If you want to use setInterval() directly in Activity's code, setupTimer() in BannerSlider works twice.

When you use setInterval(), setupTimer() works at first time. And It checks for "is timer object created once" if so, then the timer to be stopped and created new one.

Besides, when BannerSlider is created for the first time, parseCustomAttributes() works. Also setup() in parseCustomAttributes() works. As a result setupTimer() in setup() works as well. So timer created one more time without check.

You can resolved easily this problem. Just move, the check for "is timer object created once", from "onIntervalChange()" to "setupTimer()"

Slide changed notification

Hello there, I have made a small customization in your BannerSlider class adding the functionality to notify that the slide has been changed. Since I cannot create a branch and a pull request, I'm sending you the file, in case you're interested in adding it to master

BannerSlider.java.zip

Caching problem

Caching doesnt seem to work for me. The images always loaded from the url server. If data offline no images shown even if images i visit previously. Also if i visit the same fragment instant no images shown also. App is a city guide. Places activity loaded with places fragment. Slider in fragment.

BannerSlider bannerSlider = (BannerSlider) mRootView.findViewById(R.id.banner_slider1);

banners.add(new RemoteBanner("" + mPoi.getImageExtras(2) + ""));
banners.add(new RemoteBanner("" + mPoi.getImageExtras(3) + ""));
banners.add(new RemoteBanner("" + mPoi.getImageExtras(4) + ""));
bannerSlider.setBanners(banners);

لود شدن دوباره در لوپ

وقتی که اسلایدر یک دور می زند و به تصویر اول می رسد، تصویر برای لحظه ای دیده نمی شود مثل اینکه دوباره لود می شود.
چه طور می شود این مشکل را حل کرد ؟

Images Fit sizes

Hi is there a option in which we can set the image sizes as fitxy ,fit center etc.My slider is just 150 dp height.Due to this i cant set my images fit inside the available space.

Out Of Memory Error

Hi ...
I am getting this error for some images, while loading images from urls
W/art: Throwing OutOfMemoryError "Failed to allocate a 157818236 byte allocation with 13630068 free bytes and 108MB until OOM"

Images for those I got this error are not too much bigger but having almost 500kb
Although its loading other images of 2.5 to 3 mb images successfully.

Thanks

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.