Android View that displays different content based on its state

Related tags

UI/UX MultiStateView
Overview

MultiStateView

Android Arsenal Android View that displays different content based on its state.
Based off of MeetMe/MultiStateView

The four different states the view can be in are:

  • Content
  • Empty
  • Error
  • Loading

screenshot screenshot screenshot screenshot

Using MultiStateView

MultiStateView can be used the same as any other view by adding it as a layout file via XML

<com.kennyc.view.MultiStateView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/multiStateView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:msv_errorView="@layout/error_view"
    app:msv_emptyView="@layout/empty_view"
    app:msv_loadingView="@layout/loading_view"
    app:msv_viewState="loading">
    
      <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:listitem="@android:layout/simple_list_item_1" />

</com.kennyc.view.MultiStateView>

The attributes to set for MultiStateView are

<attr name="msv_loadingView" format="reference" />
<attr name="msv_emptyView" format="reference" />
<attr name="msv_errorView" format="reference" />
<attr name="msv_viewState" format="enum">
<attr name="msv_animateViewChanges" format="boolean" />

msv_loadingView is the view to be used for VIEW_STATE_LOADING
msv_emptyView is the view to be used for VIEW_STATE_EMPTY
msv_errorView is the view to be used for VIEW_STATE_ERROR
msv_viewState is the ViewState for the MultiStateView
msv_animateViewChanges is a flag to set whether the views should animate in and out when switching states. false by default
VIEW_STATE_CONTENT is determined by whatever is inside of the tags via XML. NOTE a Content view must be set for the view to function, this is by design.

To switch the state of MultiStateView, simply call

multiStateView.viewState = state: ViewState

or in java

multiStateView.setViewState(@NonNull ViewState state)

You can also get the View for the accompanying ViewState by calling

multiStateView.getView(state: ViewState):View?

or in java

@Nullable
public View getView(@NonNull ViewState state)

Including in your project

To include MultiStateView in your project, make the following changes to your build.gradle file

Add repository

repositories {
    maven { url 'https://jitpack.io' }
}

Add dependency

dependencies {
    implementation  'com.github.Kennyc1012:MultiStateView:2.2.0'
}

Contribution

Pull requests are welcomed and encouraged. If you experience any bugs, please file an issue

License

Copyright 2015 Kenny Campagna

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.
Comments
  • In the fast switch when fragment, use it (multiStateView.setViewState (STATE_LOADING))) being given.

    In the fast switch when fragment, use it (multiStateView.setViewState (STATE_LOADING))) being given.

                                                                             android.content.res.Resources$NotFoundException: Resource ID #0x0
                                                                                   at android.content.res.Resources.getValue(Resources.java:1259)
                                                                                   at android.content.res.Resources.loadXmlResourceParser(Resources.java:2666)
                                                                                   at android.content.res.Resources.getLayout(Resources.java:1075)
                                                                                   at android.view.LayoutInflater.inflate(LayoutInflater.java:412)
                                                                                   at me.xdj.view.MultiStateView.setViewState(MultiStateView.java:87)
                                                                                   at me.xdj.view.SimpleMultiStateView.setViewState(SimpleMultiStateView.java:79)
                                                                                   at me.xdj.view.SimpleMultiStateView$1.run(SimpleMultiStateView.java:24)
                                                                                   at android.os.Handler.handleCallback(Handler.java:739)
                                                                                   at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                                   at android.os.Looper.loop(Looper.java:155)
                                                                                   at android.app.ActivityThread.main(ActivityThread.java:5721)
                                                                                   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:1029)
                                                                                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:824)
    
    opened by dreamlivemeng 4
  • click to run  'instant run', it make a error

    click to run 'instant run', it make a error

    `Process: com.kennyc.sample, PID: 3796 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.kennyc.sample/com.kennyc.sample.MainActivity}: java.lang.IllegalArgumentException: Wrong state class, expecting View State but received class com.kennyc.view.MultiStateView$SavedState instead. This usually happens when two views of different type have the same id in the same hierarchy. This view's id is id/multiStateView. Make sure other views do not use the same id. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2327) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2392) at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3952) at android.app.ActivityThread.access$900(ActivityThread.java:153) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1311) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5293) 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)

     Caused by: java.lang.IllegalArgumentException: Wrong state class, expecting View State but received class com.kennyc.view.MultiStateView$SavedState instead. This usually happens when two views of different type have the same id in the same hierarchy. This view's id is id/multiStateView. Make sure other views do not use the same id.
        at android.view.View.onRestoreInstanceState(View.java:13764)
        at com.kennyc.view.MultiStateView.onRestoreInstanceState(MultiStateView.kt:180)
        at android.view.View.dispatchRestoreInstanceState(View.java:13740)
        at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2887)
        at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2893)
        at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2893)
        at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:2893)
        at android.view.View.restoreHierarchyState(View.java:13718)
        at com.android.internal.policy.impl.PhoneWindow.restoreHierarchyState(PhoneWindow.java:2009)
        at android.app.Activity.onRestoreInstanceState(Activity.java:1023)
        at android.app.Activity.performRestoreInstanceState(Activity.java:978)
        at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1162)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2300)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2392) 
        at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3952) 
        at android.app.ActivityThread.access$900(ActivityThread.java:153) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1311) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:135) 
        at android.app.ActivityThread.main(ActivityThread.java:5293) 
        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) 
    

    ` android studio 3.4.2 @Kennyc1012

    opened by dogscar 3
  • How to set custom layout

    How to set custom layout

    How to set custom layout? Code: @MultiStateView.ViewState public final int CUSTOM = 20;

    LayoutInflater layoutInflater = LayoutInflater.from(this); View cLayout = layoutInflater.inflate(R.layout.custom_view, null); mMultiStateView.setViewForState(cLayout,CUSTOM);

    But error log: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.View.setVisibility(int)' on a null object reference at com.kennyc.view.MultiStateView$1.onAnimationEnd(MultiStateView.java:427) at android.animation.ValueAnimator.endAnimation(ValueAnimator.java:1239) at android.animation.ValueAnimator$AnimationHandler.doAnimationFrame(ValueAnimator.java:766) at android.animation.ValueAnimator$AnimationHandler$1.run(ValueAnimator.java:801) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:894)

    opened by rmtic 3
  • the error only show Android7.0 or more

    the error only show Android7.0 or more

    Caused by: android.view.InflateException: Binary XML file line #33: Content view is not defined Caused by: java.lang.IllegalArgumentException: Content view is not defined at com.zhongtuobang.android.widget.statuslayout.MultiStateView.onAttachedToWindow(MultiStateView.java:124) at android.view.View.dispatchAttachedToWindow(View.java:15543) at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2955) at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2962) at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2962) at android.view.ViewGroup.addViewInner(ViewGroup.java:4510) at android.view.ViewGroup.addView(ViewGroup.java:4312) at android.view.ViewGroup.addView(ViewGroup.java:4284) at android.view.LayoutInflater.inflate(LayoutInflater.java:527) at android.view.LayoutInflater.inflate(LayoutInflater.java:426) at android.view.LayoutInflater.inflate(LayoutInflater.java:377) at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:292) at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:140) at com.zhongtuobang.android.ui.base.BaseActivity.onCreate(BaseActivity.java:112) at android.app.Activity.performCreate(Activity.java:6910) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2746) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2864) at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4720) at android.app.ActivityThread.-wrap20(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1573) at android.os.Handler.dispatchMessage(Handler.java:105) at android.os.Looper.loop(Looper.java:156) at android.app.ActivityThread.main(ActivityThread.java:6523) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:941) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:831)

    opened by guangxingmao 3
  • setOnClickListener and google ads conflicts

    setOnClickListener and google ads conflicts

    setOnClickListener and google ads conflicts, When there is the layout of AdView, setOnClickListener not monitor

    setOnClickListener和google ads 冲突, 当有在布局有AdView时,setOnClickListener无法监听

    Java

    msvXrv.getView(MultiStateView.VIEW_STATE_ERROR).findViewById(R.id.retry)
            .setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                   ...
                }
            });
    

    XML:

    <?xml version="1.0" encoding="utf-8"?>
    <com.kennyc.view.MultiStateView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:ads="http://schemas.android.com/apk/res-auto"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/msv_xrv"
        style="@style/layout_match"
        app:msv_emptyView="@layout/empty_view"
        app:msv_errorView="@layout/error_view"
        app:msv_loadingView="@layout/loading_view"
        app:msv_viewState="content">
    
    
        <com.google.android.gms.ads.AdView
            android:id="@+id/adView"
            style="@style/layout_wrap"
            android:layout_alignBottom="@+id/xrv_main"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_gravity="center_horizontal"
            ads:adSize="BANNER"
            ads:adUnitId="@string/banner_ad_unit_id"></com.google.android.gms.ads.AdView>
    
        <com.jcodecraeer.xrecyclerview.XRecyclerView
            android:id="@+id/xrv_main"
            style="@style/layout_match"
            android:layout_marginTop="50dp"
            android:scrollbars="none" />
    
    </com.kennyc.view.MultiStateView>
    
    opened by qq137712630 3
  • Crash in onRestoreInstanceState on sdk 21

    Crash in onRestoreInstanceState on sdk 21

    The onRestoreInstanceState isn't properly defined. It seems to work on newer android versions, but it crashes at least on Android 5 (sdk 21). You can reproduce it on the sample with an emulator on Android 5, just launch the app and rotate the screen, you will get a crash.

    opened by nicomott 2
  • Replace ViewState int constants with enums

    Replace ViewState int constants with enums

    https://github.com/Kennyc1012/MultiStateView/blob/355ceff2bc6bc0819abe2bb2b23921558872fa16/library/src/main/java/com/kennyc/view/MultiStateView.kt#L26-L29

    opened by pavi2410 2
  • How to use ButterKnife to bind view from msv_emptyView

    How to use ButterKnife to bind view from msv_emptyView

    My question as the title: I got ButterKnife's error: java.lang.IllegalStateException: Required view 'empty_follow_button' with ID 2131558631 for field 'emptyButton' and method 'onClick' was not found. If this view is optional add '@Nullable' (fields) or '@Optional' (methods) annotation. at butterknife.internal.Utils.findRequiredView(Utils.java:138) My java code:

        private Unbinder unbinder;
    
        @BindView(R.id.empty_follow_button)
        AppCompatButton emptyButton;
    
        @OnClick(R.id.empty_follow_button)
        void onClick() {
            Intent intent = new Intent(getContext(), UserRecommendActivity.class);
            startActivityForResult(intent, REQUEST_USER_RECOMMEND_CODE);
        }
    
        public FollowFragment() {
            // Required empty public constructor
        }
    
        public static FollowFragment newInstance() {
            FollowFragment fragment = new FollowFragment();
            return fragment;
        }
    
    
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            View view = inflater.inflate(R.layout.fragment_post_follow, container, false);
            unbinder = ButterKnife.bind(this, view);
            setUpView();
            return view;
        }
    
        @Override
        public void onDestroyView() {
            super.onDestroyView();
            unbinder.unbind();
        }
    `
    
    empty_follow_button inside @layout/view_empty_follow
    
    
    <com.kennyc.view.MultiStateView
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/multiStateView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:msv_animateViewChanges="true"
        app:msv_emptyView="@layout/view_empty_follow"
        app:msv_errorView="@layout/view_error"
        app:msv_loadingView="@layout/view_loading_first"
        app:msv_viewState="empty">
    
        <android.support.v7.widget.RecyclerView
            android:id="@+id/list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    </com.kennyc.view.MultiStateView>
    
    
    opened by NtcWai 2
  • Can not build project from CLI

    Can not build project from CLI

    FAILURE: Build failed with an exception.
    
    * Where:
    Build file '/Users/vbauer/Documents/workspace/java/apkmaster/temp/1726/src/MultiStateView-master/library/build.gradle' line: 1
    
    * What went wrong:
    A problem occurred evaluating project ':library'.
    > Failed to apply plugin [id 'com.android.library']
       > Could not create plugin of type 'LibraryPlugin'.
    
    * Try:
    Run with --info or --debug option to get more log output.
    
    * Exception is:
    org.gradle.api.GradleScriptException: A problem occurred evaluating project ':library'.
        at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:93)
        at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl$1.run(DefaultScriptPluginFactory.java:144)
        at org.gradle.configuration.ProjectScriptTarget.addConfiguration(ProjectScriptTarget.java:72)
        at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:149)
        at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:38)
        at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:25)
        at org.gradle.configuration.project.ConfigureActionsProjectEvaluator.evaluate(ConfigureActionsProjectEvaluator.java:34)
        at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:55)
        at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:510)
        at org.gradle.api.internal.project.AbstractProject.evaluate(AbstractProject.java:90)
        at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:47)
        at org.gradle.configuration.DefaultBuildConfigurer.configure(DefaultBuildConfigurer.java:35)
        at org.gradle.initialization.DefaultGradleLauncher$2.run(DefaultGradleLauncher.java:125)
        at org.gradle.internal.Factories$1.create(Factories.java:22)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:52)
        at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:122)
        at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32)
        at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:99)
        at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:93)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:62)
        at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:93)
        at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:82)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:94)
        at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28)
        at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:43)
        at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:28)
        at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:78)
        at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:48)
        at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:51)
        at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:28)
        at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:43)
        at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:170)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:237)
        at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:210)
        at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35)
        at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:206)
        at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
        at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
        at org.gradle.launcher.Main.doAction(Main.java:33)
        at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:54)
        at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:35)
        at org.gradle.launcher.GradleMain.main(GradleMain.java:23)
        at org.gradle.wrapper.BootstrapMainStarter.start(BootstrapMainStarter.java:33)
        at org.gradle.wrapper.WrapperExecutor.execute(WrapperExecutor.java:130)
        at org.gradle.wrapper.GradleWrapperMain.main(GradleWrapperMain.java:48)
    Caused by: org.gradle.api.internal.plugins.PluginApplicationException: Failed to apply plugin [id 'com.android.library']
        at org.gradle.api.internal.plugins.DefaultPluginManager.doApply(DefaultPluginManager.java:160)
        at org.gradle.api.internal.plugins.DefaultPluginManager.apply(DefaultPluginManager.java:112)
        at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.applyType(DefaultObjectConfigurationAction.java:112)
        at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.access$200(DefaultObjectConfigurationAction.java:35)
        at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction$3.run(DefaultObjectConfigurationAction.java:79)
        at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.execute(DefaultObjectConfigurationAction.java:135)
        at org.gradle.api.internal.project.AbstractPluginAware.apply(AbstractPluginAware.java:46)
        at org.gradle.api.plugins.PluginAware$apply.call(Unknown Source)
        at org.gradle.api.internal.project.ProjectScript.apply(ProjectScript.groovy:35)
        at org.gradle.api.Script$apply$0.callCurrent(Unknown Source)
        at build_185opdsuldj4oczy3veuedu9b.run(/Users/vbauer/Documents/workspace/java/apkmaster/temp/1726/src/MultiStateView-master/library/build.gradle:1)
        at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:91)
        ... 50 more
    Caused by: org.gradle.api.plugins.PluginInstantiationException: Could not create plugin of type 'LibraryPlugin'.
        at org.gradle.api.internal.plugins.DefaultPluginManager.instantiatePlugin(DefaultPluginManager.java:61)
        at org.gradle.api.internal.plugins.DefaultPluginManager.doApply(DefaultPluginManager.java:135)
        ... 61 more
    Caused by: java.lang.RuntimeException: Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVERRIDE environment variable to "9bd2076e9cc722f05ab125f51eef2c3d2eda55fd"
        at com.android.build.gradle.BasePlugin.verifyRetirementAge(BasePlugin.java:227)
        at com.android.build.gradle.BasePlugin.<init>(BasePlugin.java:162)
        at com.android.build.gradle.LibraryPlugin.<init>(LibraryPlugin.groovy:47)
        at org.gradle.api.internal.DependencyInjectingInstantiator.newInstance(DependencyInjectingInstantiator.java:48)
        at org.gradle.api.internal.plugins.DefaultPluginManager.instantiatePlugin(DefaultPluginManager.java:59)
        ... 62 more
    
    
    opened by vbauer 2
  • MSView with ViewPager

    MSView with ViewPager

    Hello, thanks for your work! I use viewpager with ur library and i have issue: if i add 3 and more tabs and switch to last tab i have loadingView on tabs. but i not change state!

    i cant load gif with example ;
    please check it here: http://i.imgur.com/uugM9Rt.gif

    where I could make a mistake?

    example of my code (onCreateView): http://i.imgur.com/j5m96il.png

    i use viewPager + (fragment: MSView+ListView)

    sorry for my bad engl.

    opened by objque 2
  • JitPack generates Java 8 bytecode for the library

    JitPack generates Java 8 bytecode for the library

    https://jitpack.io/docs/BUILDING/#java-version

    Because of this, my project does not compile.

    Cannot inline bytecode built with JVM target 1.8 into bytecode that is being built with JVM target 1.6. Please specify proper '-jvm-target' option

    opened by pavi2410 1
Releases(2.2.0)
Owner
Kenny
Kenny
A View on which you can freely draw, customizing paint width, alpha and color, and take a screenshot of the content. Useful for note apps, signatures or free hand writing.

FreeDrawView A View that let you draw freely on it. You can customize paint width, alpha and color. Can be useful for notes app, signatures or hands-f

Riccardo Moro 643 Nov 28, 2022
An android custom view that displays a circle with a colored arc given a mark

MarkView An android custom view that displays a circle with a colored arc given a mark. Usage Add as a dependency compile 'com.github.xiprox.markv

İhsan Işık 200 Nov 25, 2022
A Tinder-like Android library to create the swipe cards effect. You can swipe left or right to like or dislike the content.

Swipecards Travis master: A Tinder-like cards effect as of August 2014. You can swipe left or right to like or dislike the content. The library create

Dionysis Lorentzos 2.3k Dec 9, 2022
Rn-scratch-card - React Native Scratch Card which temporarily hides content from user

rn-scratch-card React Native Scratch Card which temporarily hides content from a

Sweatcoin 54 Jan 4, 2023
Custom & highly configurable seek slider with sliding intervals, disabled state and every possible setting to tackle!

LabeledSeekSlider Custom & highly configurable seek slider with sliding intervals, disabled state and every possible setting to tackle! Minimum target

Edgar Žigis 78 Sep 27, 2022
Takes the input from the Android MediaPlayer and displays visualizations, like in iTunes or WinAmp

Android Visualizer A View subclass that Takes the input from the Android MediaPlayer and displays visualizations, like in iTunes or WinAmp The Visuali

null 798 Dec 22, 2022
SmileyRating is a simple rating bar for android. It displays animated smileys as rating icon.

Smiley Rating SmileyRating is a simple rating bar for android. It displays animated smileys as rating icon. Drawn completely using android canvas Insp

Sujith Niraikulathan 1.1k Dec 22, 2022
Displays your screen time in a permanent notification.

Screen Time Displays your screen time in a permanent notification. By making screen time more prominent, you can get a better sense of how much of the

Markus Fisch 24 Nov 29, 2022
A simple launcher which displays all the apps on a RecyclerView trying to KISS

A simple launcher which displays all the apps on a RecyclerView trying to KISS

Alex Allafi 1 Jun 17, 2022
TabSlider - An expanding slider widget which displays selected value

TabSlider - An expanding slider widget which displays selected value

null 1 Apr 20, 2022
Android App that communicates with a back-end server to display different One Piece characters

About This project is an Android App that communicates with a back-end server to display different One Piece characters. It's roughly based on this co

Sam Garcia 1 Feb 4, 2022
Android View for displaying and selecting values in a circle-shaped View, with animations and touch gestures.

CircleDisplay Android View for displaying and selecting (by touch) values / percentages in a circle-shaped View, with animations. Features Core featur

Philipp Jahoda 287 Nov 18, 2022
FloatingView can make the target view floating above the anchor view with cool animation

FloatingView FloatingView can make the target view floating above the anchor view with cool animation Links 中文版 README Blog about FloatingView demo.ap

UFreedom 1.8k Dec 27, 2022
用于做Path动画的自定义View。 I have a path.I have a view. (Oh~),Path(Anim)View.

PathAnimView 用于做Path动画的自定义View。 I have a path.I have a view. (Oh~),Path(Anim)View. 现已经找到图片->SVG->PATH的正确姿势, Now i have a pic.I have a view. Oh~,Path(A

张旭童 1.1k Oct 28, 2022
Provides 9-patch based drop shadow for view elements. Works on API level 9 or later.

Material Shadow 9-Patch This library provides 9-patch based drop shadow for view elements. Works on API level 14 or later. Target platforms API level

Haruki Hasegawa 481 Dec 19, 2022
Android StackBlur is a library that can perform a blurry effect on a Bitmap based on a gradient or radius, and return the result. The library is based on the code of Mario Klingemann.

Android StackBlur Android StackBlur is a library that can perform a blurry effect on a Bitmap based on a gradient or radius, and return the result. Th

Enrique López Mañas 3.6k Dec 29, 2022
TourGuide is an Android library that aims to provide an easy way to add pointers with animations over a desired Android View

TourGuide TourGuide is an Android library. It lets you add pointer, overlay and tooltip easily, guiding users on how to use your app. Refer to the exa

Tan Jun Rong 2.6k Jan 5, 2023
View that imitates Ripple Effect on click which was introduced in Android L (for Android 2.3+)

RippleView View that imitates Ripple Effect on click which was introduced in Android L. Usage For a working implementation, Have a look at the Sample

Muthuramakrishnan Viswanathan 1.2k Dec 30, 2022
Snake View is a simple and animated linear chart for Android.

Snake View Snake library is a simple and animation line chart for Android. Latest Version How to use Configuring your project dependencies Add the lib

Txus Ballesteros 339 Dec 14, 2022