facebook / shimmer-android Goto Github PK
View Code? Open in Web Editor NEWAn easy, flexible way to add a shimmering effect to any view in an Android app.
Home Page: http://facebook.github.io/shimmer-android/
License: Other
An easy, flexible way to add a shimmering effect to any view in an Android app.
Home Page: http://facebook.github.io/shimmer-android/
License: Other
Hi,
Looking at the documentation I didn't found a way to exclude some views from the animation. Is there a way to achieve this without having multiple shimmers ?
Here is what I'd like to have with Separator and TextView not animated :
<ShimmerL>
<ConstraintL>
<View>
<View>
<Separator>
<TextView>
<View>
<View>
</ConstL>
</Shimmer>
The thing is with a complex layout it's nice to flatten it with constraint layout. Having (multiple) ShimmerLayout inside my constraint layout remove the ability to setup constraint within childs views.
I have a gridlayout that i use as placeholder while i load some data, and I used shimmer to animate it.
If I surround the gridlayout with a ShimmerFrameLayout, then the phone becomes very jerky and stutters a lot when the anim is happening. If I enable GPU profiling you can see very long blue bars indicating heavy animation work.
Is this expected? How are other apps dealing with this?
This is how im using it:
<com.facebook.shimmer.ShimmerFrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app1:angle="cw_0"
app1:auto_start="true"
app1:duration="1500"
app1:tilt="0">
<android.support.v7.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:alignmentMode="alignMargins"
app:columnCount="2"
app:useDefaultMargins="true">
<include
layout="@layout/view_item_grid_empty"
app:layout_columnWeight="1"/>
<include
layout="@layout/view_item_grid_empty"
app:layout_columnWeight="1"/>
<include layout="@layout/view_item_grid_empty"
app:layout_columnWeight="1" />
<include layout="@layout/view_item_grid_empty"
app:layout_columnWeight="1" />
<include layout="@layout/view_item_grid_empty"
app:layout_columnWeight="1" />
<include layout="@layout/view_item_grid_empty"
app:layout_columnWeight="1" />
</android.support.v7.widget.GridLayout>
</com.facebook.shimmer.ShimmerFrameLayout>
I am seeing the following with LeakCanary - I think it is because I am exiting the activity while there is some animation thread running. What is the possible solution for this?
05-20 17:10:33.377 13526-14611/com.gmspartnersltd.earthmiles.debug D/LeakCanary﹕ In com.gmspartnersltd.earthmiles.debug:1.6:6.
* com.gmspartnersltd.earthmiles.views.mainthreetabs.rewardsfragment.RewardsSubFragment has leaked:
* GC ROOT android.view.Choreographer$FrameDisplayEventReceiver.this$0
* references android.view.Choreographer.mCallbackQueues
* references array android.view.Choreographer$CallbackQueue[].[1]
* references android.view.Choreographer$CallbackQueue.mHead
* references android.view.Choreographer$CallbackRecord.action
* references android.animation.ValueAnimator$AnimationHandler.mAnimations
* references java.util.ArrayList.array
* references array java.lang.Object[].[0]
* references android.animation.ValueAnimator.mUpdateListeners
* references java.util.ArrayList.array
* references array java.lang.Object[].[0]
* references com.facebook.shimmer.ShimmerFrameLayout$2.this$0 (anonymous class implements android.animation.ValueAnimator$AnimatorUpdateListener)
* references com.facebook.shimmer.ShimmerFrameLayout.mContext
* references android.view.ContextThemeWrapper.mBase
* references com.gmspartnersltd.earthmiles.views.MainActivity.mFragments
* references android.app.FragmentManagerImpl.mAdded
* references java.util.ArrayList.array
* references array java.lang.Object[].[0]
* references com.gmspartnersltd.earthmiles.views.mainthreetabs.rewardsfragment.RewardsFragment.mTabsLinearLayout
* references android.widget.LinearLayout.mParent
* references com.astuetz.PagerSlidingTabStrip.pager
* references android.support.v4.view.ViewPager.mAdapter
* references com.gmspartnersltd.earthmiles.views.mainthreetabs.rewardsfragment.RewardsSubTabAdapter.mCurrentPrimaryItem
* leaks com.gmspartnersltd.earthmiles.views.mainthreetabs.rewardsfragment.RewardsSubFragment instance
* Reference Key: 314744a1-c40a-4b0d-aec1-547d7117ace4
* Device: Genymotion generic Google Nexus 5 - 5.0.0 - API 21 - 1080x1920 vbox86p
* Android Version: 5.0 API: 21
* Durations: watch=5010ms, gc=123ms, heap dump=829ms, analysis=4626ms
I can't set the relative width:
app:relative_width="0.3"
java.lang.UnsupportedOperationException: Can't convert value at index 9 to dimension: type=0x4
at android.content.res.TypedArray.getDimensionPixelSize(TypedArray.java:720)
at com.facebook.shimmer.ShimmerFrameLayout.<init>(ShimmerFrameLayout.java:226)
at com.facebook.shimmer.ShimmerFrameLayout.<init>(ShimmerFrameLayout.java:147)
... 33 more
Looking at the source, this is because the setter inexplicably takes an int and casts it to float, instead of taking a float in the first place.
public void setRelativeWidth(int relativeWidth) {
this.mMask.relativeWidth = (float)relativeWidth;
this.resetAll();
}
This should be an easy fix. I'd open a PR myself if I didn't have a deadline to meet.
There should be an option/feature to stop the animation/visibility that waits a minimum time to be dismissed. It should be visible/animate for a minimum amount of time to avoid "flashes" in the UI.
Looks like the latest commit reduce the min-sdk requirement. Awesome. When will it get pushed to maven?
It appears both shimmer-android and Fabric libraries and define the attribute "intensity". Could you prefix your libraries attributes as per https://code.google.com/p/android/issues/detail?id=22576?
...app\build\intermediates\exploded-aar\com.twitter.sdk.android\twitter-core\1.4.0\res\values\values.xml
Error:(2) Attribute "intensity" has already been defined
App is crashing consistently while running espresso tests.
Stacktrace:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.graphics.Bitmap.setHasAlpha(boolean)' on a null object reference
at android.graphics.Bitmap.createBitmap(Bitmap.java:1034)
at android.graphics.Bitmap.createBitmap(Bitmap.java:968)
at android.graphics.Bitmap.createBitmap(Bitmap.java:918)
at android.graphics.Bitmap.createBitmap(Bitmap.java:879)
at com.facebook.shimmer.ShimmerFrameLayout.createBitmapAndGcIfNecessary(ShimmerFrameLayout.java:943)
at com.facebook.shimmer.ShimmerFrameLayout.tryCreateRenderBitmap(ShimmerFrameLayout.java:744)
at com.facebook.shimmer.ShimmerFrameLayout.tryObtainRenderUnmaskBitmap(ShimmerFrameLayout.java:728)
at com.facebook.shimmer.ShimmerFrameLayout.dispatchDrawUsingBitmap(ShimmerFrameLayout.java:710)
at com.facebook.shimmer.ShimmerFrameLayout.dispatchDraw(ShimmerFrameLayout.java:697)
at android.view.View.draw(View.java:19126)
at android.view.View.updateDisplayListIfDirty(View.java:18073)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4198)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4178)
at android.view.View.updateDisplayListIfDirty(View.java:18032)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4198)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4178)
at android.view.View.updateDisplayListIfDirty(View.java:18032)
at android.view.View.draw(View.java:18851)
at android.view.ViewGroup.drawChild(ViewGroup.java:4214)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4000)
at android.view.View.draw(View.java:19126)
at android.widget.ScrollView.draw(ScrollView.java:1739)
at android.view.View.updateDisplayListIfDirty(View.java:18073)
at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4198)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4178)
at android.view.View.updateDisplayListIfDirty(View.java:18032)
at android.view.View.draw(View.java:18851)
at android.view.ViewGroup.drawChild(ViewGroup.java:4214)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4000)
at android.view.View.updateDisplayListIfDirty(View.java:18064)
at android.view.View.draw(View.java:18851)
at android.view.ViewGroup.drawChild(ViewGroup.java:4214)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4000)
at android.view.View.draw(View.java:19126)
at android.widget.HorizontalScrollView.draw(HorizontalScrollView.java:1658)
at android.view.View.updateDisplayListIfDirty(View.java:18073)
at android.view.View.draw(View.java:18851)
at android.view.ViewGroup.drawChild(ViewGroup.java:4214)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4000)
at android.view.View.updateDisplayListIfDirty(View.java:18064)
at android.view.View.draw(View.java:18851)
at android.view.ViewGroup.drawChild(ViewGroup.java:4214)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4000)
at android.view.View.updateDisplayListIfDirty(View.java:18064)
at android.view.View.draw(View.java:18851)
at android.view.ViewGroup.drawChild(ViewGroup.java:4214)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4000)
at android.view.View.updateDisplayListIfDirty(View.java:18064)
at android.view.View.draw(View.java:18851)
at android.view.ViewGroup.drawChild(ViewGroup.java:4214)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4000)
at android.view.View.updateDisplayListIfDirty(View.java:18064)
at android.view.View.draw(View.java:18851)
at android.view.ViewGroup.drawChild(ViewGroup.java:4214)
at android.support.v4.widget.DrawerLayout.drawChild(DrawerLayout.java:1367)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4000)
at android.view.View.updateDisplayListIfDirty(View.java:18064)
at android.view.View.draw(View.java:18851)
at android.view.ViewGroup.drawChild(ViewGroup.java:4214)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4000)
at android.view.View.updateDisplayListIfDirty(View.java:18064)
at android.view.View.draw(View.java:18851)
at android.view.ViewGroup.drawChild(ViewGroup.java:4214)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4000)
at android.view.View.updateDisplayListIfDirty(View.java:18064)
at android.view.View.draw(View.java:18851)
at android.view.ViewGroup.drawChild(ViewGroup.java:4214)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4000)
at android.view.View.updateDisplayListIfDirty(View.java:18064)
at android.view.View.draw(View.java:18851)
at android.view.ViewGroup.drawChild(ViewGroup.java:4214)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4000)
at android.view.View.updateDisplayListIfDirty(View.java:18064)
at android.view.View.draw(View.java:18851)
at android.view.ViewGroup.drawChild(ViewGroup.java:4214)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4000)
at android.view.View.updateDisplayListIfDirty(View.java:18064)
at android.view.View.draw(View.java:18851)
at android.view.ViewGroup.drawChild(ViewGroup.java:4214)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4000)
at android.view.View.draw(View.java:19126)
at com.android.internal.policy.DecorView.draw(DecorView.java:785)
at android.view.View.updateDisplayListIfDirty(View.java:18073)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:643)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:649)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:757)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2980)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2794)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2347)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1386)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6733)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:911)
at android.view.Choreographer.doCallbacks(Choreographer.java:723)
at android.view.Choreographer.doFrame(Choreographer.java:658)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:897)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
I have a bottom navigation bar. There are 4 options A,B,C and D. When i try to swiftly click A and B, after a couple of clicks the app crashes and the log is below. How do i fix it?
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.rajatcube.sharstory, PID: 11461
java.lang.OutOfMemoryError: Failed to allocate a 6234636 byte allocation with 5477368 free bytes and 5MB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.Bitmap.nativeCreate(Native Method)
at android.graphics.Bitmap.createBitmap(Bitmap.java:977)
at android.graphics.Bitmap.createBitmap(Bitmap.java:948)
at android.graphics.Bitmap.createBitmap(Bitmap.java:915)
at com.facebook.shimmer.ShimmerFrameLayout.createBitmapAndGcIfNecessary(ShimmerFrameLayout.java:946)
at com.facebook.shimmer.ShimmerFrameLayout.getMaskBitmap(ShimmerFrameLayout.java:822)
at com.facebook.shimmer.ShimmerFrameLayout.drawMasked(ShimmerFrameLayout.java:771)
at com.facebook.shimmer.ShimmerFrameLayout.dispatchDrawUsingBitmap(ShimmerFrameLayout.java:720)
at com.facebook.shimmer.ShimmerFrameLayout.dispatchDraw(ShimmerFrameLayout.java:697)
at android.view.View.draw(View.java:18401)
at android.view.View.updateDisplayListIfDirty(View.java:17376)
at android.view.View.draw(View.java:18160)
at android.view.ViewGroup.drawChild(ViewGroup.java:3968)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3754)
at android.view.View.updateDisplayListIfDirty(View.java:17371)
at android.view.View.draw(View.java:18160)
at android.view.ViewGroup.drawChild(ViewGroup.java:3968)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3754)
at android.view.View.updateDisplayListIfDirty(View.java:17371)
at android.view.View.draw(View.java:18160)
at android.view.ViewGroup.drawChild(ViewGroup.java:3968)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3754)
at android.view.View.updateDisplayListIfDirty(View.java:17371)
at android.view.View.draw(View.java:18160)
at android.view.ViewGroup.drawChild(ViewGroup.java:3968)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3754)
at android.view.View.updateDisplayListIfDirty(View.java:17371)
at android.view.View.draw(View.java:18160)
at android.view.ViewGroup.drawChild(ViewGroup.java:3968)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3754)
at android.view.View.updateDisplayListIfDirty(View.java:17371)
at android.view.View.draw(View.java:18160)
at android.view.ViewGroup.drawChild(ViewGroup.java:3968)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3754)
at android.view.View.updateDisplayListIfDirty(View.java:17371)
at android.view.View.draw(View.java:18160)
at android.view.ViewGroup.drawChild(ViewGroup.java:3968)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3754)
at android.view.View.updateDisplayListIfDirty(View.java:17371)
at android.view.View.draw(View.java:18160)
at android.view.ViewGroup.drawChild(ViewGroup.java:3968)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3754)
at android.view.View.draw(View.java:18401)
at com.android.internal.policy.DecorView.draw(DecorView.java:966)
at android.view.View.updateDisplayListIfDirty(View.java:17376)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:722)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:728)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:836)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:3168)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2964)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2552)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1537)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7183)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:959)
at android.view.Choreographer.doCallbacks(Choreographer.java:734)
at android.view.Choreographer.doFrame(Choreographer.java:670)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:945)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
I think this part will also be useful -
D/ShimmerFrameLayout: ShimmerFrameLayout failed to create working bitmap (width = 1056, height = 1476)
dalvik.system.VMStack.getThreadStackTrace(Native Method)
java.lang.Thread.getStackTrace(Thread.java:1567)
com.facebook.shimmer.ShimmerFrameLayout.tryCreateRenderBitmap(ShimmerFrameLayout.java:754)
com.facebook.shimmer.ShimmerFrameLayout.tryObtainRenderMaskBitmap(ShimmerFrameLayout.java:735)
com.facebook.shimmer.ShimmerFrameLayout.dispatchDrawUsingBitmap(ShimmerFrameLayout.java:711)
com.facebook.shimmer.ShimmerFrameLayout.dispatchDraw(ShimmerFrameLayout.java:697)
android.view.View.draw(View.java:18401)
android.view.View.updateDisplayListIfDirty(View.java:17376)
android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3952)
android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3932)
android.view.View.updateDisplayListIfDirty(View.java:17339)
android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3952)
android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3932)
android.view.View.updateDisplayListIfDirty(View.java:17339)
android.view.View.draw(View.java:18160)
android.view.ViewGroup.drawChild(ViewGroup.java:3968)
android.view.ViewGroup.dispatchDraw(ViewGroup.java:3754)
android.view.View.updateDisplayListIfDirty(View.java:17371)
android.view.View.draw(View.java:18160)
android.view.ViewGroup.drawChild(ViewGroup.java:3968)
android.view.ViewGroup.dispatchDraw(ViewGroup.java:3754)
android.view.View.updateDisplayListIfDirty(View.java:17371)
android.view.View.draw(View.java:18160)
android.view.ViewGroup.drawChild(ViewGroup.java:3968)
android.view.ViewGroup.dispatchDraw(ViewGroup.java:3754)
android.view.View.updateDisplayListIfDirty(View.java:17371)
android.view.View.draw(View.java:18160)
android.view.ViewGroup.drawChild(ViewGroup.java:3968)
android.view.ViewGroup.dispatchDraw(ViewGroup.java:3754)
android.view.View.updateDisplayListIfDirty(View.java:17371)
android.view.View.draw(View.java:18160)
android.view.ViewGroup.drawChild(ViewGroup.java:3968)
android.view.ViewGroup.dispatchDraw(ViewGroup.java:3754)
android.view.View.updateDisplayListIfDirty(View.java:17371)
android.view.View.draw(View.java:18160)
android.view.ViewGroup.drawChild(ViewGroup.java:3968)
android.view.ViewGroup.dispatchDraw(ViewGroup.java:3754)
android.view.View.draw(View.java:18401)
com.android.internal.policy.DecorView.draw(DecorView.java:966)
android.view.View.updateDisplayListIfDirty(View.java:17376)
android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:722)
android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:728)
android.view.ThreadedRenderer.draw(ThreadedRenderer.java:836)
android.view.ViewRootImpl.draw(ViewRootImpl.java:3168)
android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2964)
android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2552)
android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1537)
android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7183)
android.view.Choreographer$CallbackRecord.run(Choreographer.java:959)
android.view.Choreographer.doCallbacks(Choreographer.java:734)
android.view.Choreographer.doFrame(Choreographer.java:670)
android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:945)
android.os.Handler.handleCallback(Handler.java:751)
android.os.Handler.dispatchMessage(Handler.java:95)
android.os.Looper.loop(Looper.java:154)
android.app.ActivityThread.main(ActivityThread.java:6776)
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1518)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)
Will there be a Xamarin Android binding available?
I'll admit this is a pretty dumb ticket, but it's worth pointing out that the code examples on the webpage can't be copy-pasted due to smart quotes used in the code examples:
https://github.com/facebook/shimmer-android/blob/gh-pages/index.html#L95
Pasting this into Android Studio makes the IDE think the wrong closing tags are used, attributes aren't defined, and other totally non-useful errors ;)
Seems like an easy fixed. I'd send over a PR but I think my contract may prevent me from doing so
With the release of Android Studio 3.2.0, is there any plan to update this library to support AndroidX soon?
The library itself requires sdk level 11 as minimum but, the included sample project sets the minimum sdk to 16. This causes including the library to set the minimum level to 16, when it can be done in api level 11.
The Shimmer implementation seems not to work for certain devices (like HUAWEI MediaPad M3 Lite 10). I am using the ShimmerFrameLayout (auto_start = false) and start the shimmer using .startShimmer()
In the style definitions rect line causing error.
Gradle message shows expected enum but got (raw) string rect error.
Same error occures for usages of item name="shape">oval
<style name="AndroidImageSlider_Corner_Oval_Orange">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:gravity">center</item>
<item name="android:background">@drawable/indicator_corner_bg</item>
<item name="android:paddingLeft">2dp</item>
<item name="android:paddingRight">2dp</item>
<item name="shape">oval</item>
<item name="padding_left">3dp</item>
<item name="padding_right">3dp</item>
<item name="padding_top">4dp</item>
<item name="padding_bottom">4dp</item>
<item name="selected_color">#f60</item>
<item name="unselected_color">#ffffff</item>
<item name="selected_width">6dp</item>
<item name="selected_height">6dp</item>
<item name="unselected_width">6dp</item>
<item name="unselected_height">6dp</item>
</style>
these are my log data
AGPBI: {"kind":"error","text":"error: expected enum but got (raw string) rect.","sources":[{"file":"/home/aflah/.gradle/caches/transforms-1/files-1.1/library-1.1.5.aar/22ac9c027cf078574334abf979f36c78/res/values/values.xml","position":{"startLine":29,"startColumn":4,"startOffset":3600,"endLine":48,"endColumn":12,"endOffset":4540}}],"original":"","tool":"AAPT"}
AGPBI: {"kind":"error","text":"error: expected enum but got (raw string) oval.","sources":[{"file":"/home/aflah/.gradle/caches/transforms-1/files-1.1/library-1.1.5.aar/22ac9c027cf078574334abf979f36c78/res/values/values.xml","position":{"startLine":49,"startColumn":4,"startOffset":4545,"endLine":67,"endColumn":12,"endOffset":5415}}],"original":"","tool":"AAPT"}
AGPBI: {"kind":"error","text":"error: expected enum but got (raw string) oval.","sources":[{"file":"/home/aflah/.gradle/caches/transforms-1/files-1.1/appcompat-v7-25.3.1.aar/dcedc0cb134c18ffae0fd1f3717fb6c8/res/values/values.xml","position":{"startLine":350,"startColumn":4,"startOffset":34737,"endColumn":87,"endOffset":34820}}],"original":"","tool":"AAPT"}
Failed to execute aapt
com.android.ide.common.process.ProcessException: Failed to execute aapt
at com.android.builder.core.AndroidBuilder.processResources(AndroidBuilder.java:796)
at com.android.build.gradle.tasks.ProcessAndroidResources.invokeAaptForSplit(ProcessAndroidResources.java:551)
at com.android.build.gradle.tasks.ProcessAndroidResources.doFullTaskAction(ProcessAndroidResources.java:285)
at com.android.build.gradle.internal.tasks.IncrementalTask.taskAction(IncrementalTask.java:109)
at sun.reflect.GeneratedMethodAccessor306.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$IncrementalTaskAction.doExecute(DefaultTaskClassInfoStore.java:173)
at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:134)
at org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore$StandardTaskAction.execute(DefaultTaskClassInfoStore.java:121)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:122)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:111)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:63)
at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:88)
at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:248)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:197)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:124)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:80)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:105)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:99)
at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:625)
at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:580)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:99)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
at com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:503)
at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:482)
at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:79)
at com.android.builder.core.AndroidBuilder.processResources(AndroidBuilder.java:794)
... 47 more
Caused by: java.util.concurrent.ExecutionException: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
at com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:503)
at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:462)
at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:79)
at com.android.builder.internal.aapt.v2.QueueableAapt2.lambda$makeValidatedPackage$1(QueueableAapt2.java:179)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
... 1 more
Caused by: com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
at com.android.builder.png.AaptProcess$NotifierProcessOutput.handleOutput(AaptProcess.java:463)
at com.android.builder.png.AaptProcess$NotifierProcessOutput.err(AaptProcess.java:415)
at com.android.builder.png.AaptProcess$ProcessOutputFacade.err(AaptProcess.java:332)
at com.android.utils.GrabProcessOutput$1.run(GrabProcessOutput.java:104)
FAILED
FAILURE: Build failed with an exception.
Failed to execute aapt
Hello,
Shimmer works like a charm in my project but there's a little problem. as i am using shimmer inside my recyclerview its getting stopped animating when i scrolled :(
A simple video of that problem -> Video_Of_Stopping Shimmer [20 Sec]
Note: I applied shimmer in nested recyclerview.
Here's my snippet(for simplicity i just added meaningful code).
Inside MyAdapter
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
......................................
switch (holder.getItemViewType()) {
case ViewType.LATEST_MOVIE:
final LatestMovieViewHolder latestMovieViewHolder = (LatestMovieViewHolder) holder;
latestMovieViewHolder.titleMovie.setText("Latest Movie");
latestMovieViewHolder.shimmerFrameLayout.setVisibility(View.VISIBLE);
latestMovieViewHolder.shimmerFrameLayout.startShimmerAnimation();
latestMovieViewHolder.sectionRecylerView.setLayoutManager(new LinearLayoutManager(context, OrientationHelper.HORIZONTAL, false));
latestMovieViewHolder.sectionRecylerView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
RetrofitRequestAPI retrofitRequestAPI = MyRetrofit.getRetrofitInstance().create(RetrofitRequestAPI.class);
Call<List<Movie>> requestObject = retrofitRequestAPI.getMoviesInTheater();
requestObject.enqueue(new Callback<List<Movie>>() {
@Override
public void onResponse(Call<List<Movie>> call, Response<List<Movie>> response) {
if (response.body() != null) {
latestMovieViewHolder.shimmerFrameLayout.stopShimmerAnimation();
latestMovieViewHolder.sectionRecylerView.setVisibility(View.VISIBLE);
latestMovieViewHolder.shimmerFrameLayout.setVisibility(View.GONE);
latestMovieViewHolder.sectionRecylerView.setAdapter(new SectionAdapter(context, response.body()));
}
}
@Override
public void onFailure(Call<List<Movie>> call, Throwable t) {
Toast.makeText(context, t.getMessage(), Toast.LENGTH_LONG).show();
}
});
break;
............................`
**And here XML**
`
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<!--------------------other staff>
<com.facebook.shimmer.ShimmerFrameLayout
android:id="@+id/shimmerView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include layout="@layout/recyler_view_shimmer" />
<include layout="@layout/recyler_view_shimmer" />
<include layout="@layout/recyler_view_shimmer" />
</LinearLayout>
</com.facebook.shimmer.ShimmerFrameLayout>
<android.support.v7.widget.RecyclerView
android:id="@+id/singleSectionRecylerView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
```
Is there any configuration to handle out of memory? This issue not belong to size of image that containing by container...
: FATAL EXCEPTION: main
Process: , PID: 16081 java.lang.OutOfMemoryError: Failed to allocate a 9437196 byte allocation with 6740004 free bytes and 6MB until OOM at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:747)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:568)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1014)
at android.content.res.Resources.loadDrawableForCookie(Resources.java:3747)
at android.content.res.Resources.loadDrawable(Resources.java:3620)
at android.content.res.TypedArray.getDrawable(TypedArray.java:762)
at android.widget.ImageView.(ImageView.java:151)
at android.widget.ImageView.(ImageView.java:140)
at android.support.v7.widget.AppCompatImageView.(AppCompatImageView.java:60)
at android.support.v7.widget.AppCompatImageView.(AppCompatImageView.java:56)
at android.support.v7.internal.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:98)
at android.support.v7.app.AppCompatDelegateImplV7.createView(AppCompatDelegateImplV7.java:926)
at android.support.v7.app.AppCompatDelegateImplV7.onCreateView(AppCompatDelegateImplV7.java:980)
at android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44)
at android.view.LayoutInflater$FactoryMerger.onCreateView(LayoutInflater.java:181)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:732)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:821)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:821)
at android.view.LayoutInflater.inflate(LayoutInflater.java:511)
at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
at.fragments.FirmsInfoFragment.onCreateView(FirmsFragment.java:53)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1965)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1078)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1259)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1624)
at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:517)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5951)
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:1400)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)
With Google introducing AndroidX, is migration to AndroidX on the roadmap for this project?
Also, when calling startShimmerAnimation() from inside the code, the animation makes the shimmer layout transparent
If the shimmer effect is applied to a view that is taller than it is wide in the travel direction of the shimmer a severe tearing effect can be seen.
To visualize this you can test the following layout in portrait & landscape:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:id="@+id/shimmer_test"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="2"
android:orientation="horizontal">
<com.facebook.shimmer.ShimmerFrameLayout
android:id="@+id/shimmer1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
app:auto_start="true">
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fd9fe1"/>
</com.facebook.shimmer.ShimmerFrameLayout>
<com.facebook.shimmer.ShimmerFrameLayout
android:id="@+id/shimmer2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
app:auto_start="true"
app:angle="cw_90">
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#D0B3CC"/>
</com.facebook.shimmer.ShimmerFrameLayout>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
</LinearLayout>
I have implemented the library, but this two scenarios are happening;
First, when the view comes up the shimmer animation starts automatically, but when I call mShimmerFrameLayout.stopShimmer() it does not stop it.
Secondly, when autoStart is disabled in the layout attribute and the view comes up, if I call mShimmerFrameLayout.startShimmer(), it does not start the animation.
Please a solution is needed.
FATAL EXCEPTION: main
Process: app.geniestation.com.corporate, PID: 24049
java.lang.RuntimeException: Unable to start activity ComponentInfo{app.geniestation.com.corporate/app.geniestation.com.corporate.activities.MainActivity}: android.view.InflateException: Binary XML file line #29: Binary XML file line #43: Error inflating class com.facebook.shimmer.ShimmerFrameLayout
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: android.view.InflateException: Binary XML file line #29: Binary XML file line #43: Error inflating class com.facebook.shimmer.ShimmerFrameLayout
Caused by: android.view.InflateException: Binary XML file line #43: Error inflating class com.facebook.shimmer.ShimmerFrameLayout
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:334)
at android.view.LayoutInflater.createView(LayoutInflater.java:647)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:863)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:866)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
at android.view.LayoutInflater.parseInclude(LayoutInflater.java:995)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:859)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824)
at android.view.LayoutInflater.inflate(LayoutInflater.java:515)
at android.view.LayoutInflater.inflate(LayoutInflater.java:423)
at app.geniestation.com.corporate.fragments.MainFragment.onCreateView(MainFragment.java:67)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2261)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1419)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1750)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1819)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2590)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2377)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2332)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2239)
at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3231)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3181)
at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:192)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:572)
at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:177)
10-26 16:23:34.234 24049-24049/app.geniestation.com.corporate E/AndroidRuntime: at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1333)
at android.app.Activity.performStart(Activity.java:6992)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2780)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
at android.app.ActivityThread.-wrap11(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
Caused by: java.lang.NumberFormatException: For input string: ".6"
at java.lang.Integer.parseInt(Integer.java:597)
at com.android.internal.util.XmlUtils.convertValueToInt(XmlUtils.java:133)
at android.content.res.TypedArray.getInt(TypedArray.java:375)
at com.facebook.shimmer.ShimmerFrameLayout.(ShimmerFrameLayout.java:175)
at com.facebook.shimmer.ShimmerFrameLayout.(ShimmerFrameLayout.java:147)
... 45 more
is there a way to make the shimmer effect from Right To Left?
03-12 10:05:31.064: E/AndroidRuntime(15217): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.facebook.shimmer.example/com.facebook.shimmer.example.MainActivity}: android.view.InflateException: Binary XML file line #11: Error inflating class com.facebook.shimmer.ShimmerFrameLayout
03-12 10:05:31.064: E/AndroidRuntime(15217): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2187)
Add contributing file to detail how to work on the project (first time setup, etc).
I am trying to include the gradle dependency into my app. After adding the dependency and rebuilding the app it is giving the above mentioned issue. Please let me know how to fix this issue.
I am using this library: https://github.com/sharish/ShimmerRecyclerView which depends on facebook shimmer library.
The adapter part is working fine but shimmer (by facebook is not woking at all).
Please fix.
BTW, perfectly working on stock android (My Moto E 2nd Gen Android API 21)
Problem on: MIUI Redmi 3S Prime Android API 23 MIUI Version Global 8.1 (8.1.1.0 MALMIDI)
maybe you should add autoStop property to shimmer
when repeat count reached, it will remove the mask.
We can remove a draw call if we just translate the shader used to compose the view instead of drawing a shaded rect.
com.scrat.community.framework.common.BaseNetException: Unknown error
at com.scrat.community.framework.common.BaseNetCallback.onResponse(BaseNetCallback.java:69)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:141)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
E/err: The current thread must have a looper!
java.lang.IllegalStateException: The current thread must have a looper!
at android.view.Choreographer$1.initialValue(Choreographer.java:96)
at android.view.Choreographer$1.initialValue(Choreographer.java:91)
at java.lang.ThreadLocal$Values.getAfterMiss(ThreadLocal.java:460)
at java.lang.ThreadLocal.get(ThreadLocal.java:65)
at android.view.Choreographer.getInstance(Choreographer.java:192)
at android.animation.ValueAnimator$AnimationHandler.<init>(ValueAnimator.java:600)
at android.animation.ValueAnimator$AnimationHandler.<init>(ValueAnimator.java:575)
at android.animation.ValueAnimator.getOrCreateAnimationHandler(ValueAnimator.java:1366)
at android.animation.ValueAnimator.end(ValueAnimator.java:998)
at com.facebook.shimmer.ShimmerFrameLayout.stopShimmerAnimation(ShimmerFrameLayout.java:616)
at com.scrat.community.module.home.main.MainFragment.hideLoading(MainFragment.java:180)
at com.scrat.community.module.home.main.MainFragment.showLoadCirclesFail(MainFragment.java:138)
at com.scrat.community.module.home.main.MainPresenter$1.onError(MainPresenter.java:94)
at com.scrat.community.data.callback.DefaultLoadObjCallback.onRequestFailure(DefaultLoadObjCallback.java:32)
at com.scrat.community.framework.common.BaseNetCallback.onResponse(BaseNetCallback.java:69)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:141)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
E/err: Parse error The current thread must have a looper!
java.io.IOException: Parse error The current thread must have a looper!
at com.scrat.community.framework.common.BaseNetCallback.onResponse(BaseNetCallback.java:72)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:141)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
java.lang.OutOfMemoryError: Failed to allocate a 1843212 byte allocation with 686904 free bytes and 670KB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(VMRuntime.java:-2)
at android.graphics.Bitmap.nativeCreate(Bitmap.java:-2)
at android.graphics.Bitmap.createBitmap(Bitmap.java:975)
at android.graphics.Bitmap.createBitmap(Bitmap.java:946)
at android.graphics.Bitmap.createBitmap(Bitmap.java:913)
Hey there, I'm using Facebook Shimmer in my Twitter client Spreadsheet!
Might you add it to the list, please?
play.google.com/store/apps/details?id=com.fa.spreadsheet
Thanks!
I have an image view inside a shimmer frame layout, when load an image into the image view I want to clear the shimmer entirely but there is no way to do this. If I stop the shimmer there is still an overlay over my image view.
Hor to use ShimmerFrameLayout with scrollview properly ?
<com.facebook.shimmer.ShimmerFrameLayout
android:id="@+id/shimmer_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:orientation="vertical"
shimmer:duration="1500">
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fillViewport="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<include layout="@layout/pholder_campaign" />
<include layout="@layout/pholder_campaign" />
<include layout="@layout/pholder_campaign" />
</LinearLayout>
</ScrollView>
</com.facebook.shimmer.ShimmerFrameLayout>
i want to create a view which has a bright-white light over the whole view , but when i used this library , the color of the shimmer light always depends on the color of the view's background ,for example , when a view'background is yellow ,the shimmer light is yellow too , but what i want is that the colour of the shimmer light is brght white. how can i make this?
It would be great if the sample app had the ability to tweak the various properties of the shimmer dynamically and interactively.
There should be an additional preset called "Custom" that will show a bunch of controls for each of the possible options for the shimmer object. Once a value is changed, the shimmer should be updated so you could see the new effect.
Binary XML file line #201: Binary XML file line #201: Error inflating class com.facebook.shimmer.ShimmerFrameLayout
Caused by: android.view.InflateException: Binary XML file line #201: Error inflating class com.facebook.shimmer.ShimmerFrameLayout
I have tried the gradle way it gives me "shape is already defined error" . So i tried with jar file and i was able to integrate but when i run the project i get the above error and app crashes .
i did follow the commit of removing the shimmer:animation and trying to take off the constraint layout as well . Stil its same . please help . The error is not resolved for me . i did see the issue #20 closed . But whats the solution to this ?
Shimmer animation is not working properly in version 0.1.0. I cloned the repository and the bug was fixed when I tried it.
Could you release version 0.2.0?
In case you have ShimmerFrameLayout (outer) inside ShimmerFrameLayout (inner), and you start shimmer for inner view - it also starts shimmer for outer view (at least animate it). Could you please check this?
How can i set only drawableLeft icon?
i am using the shimmer layout in the UI only and managing the visibility on the basis of API result .
i am getting the following Exception
STACK_TRACE=java.lang.IllegalArgumentException: bitmap size exceeds 32bits
at android.graphics.Bitmap.nativeCreate(Native Method)
at android.graphics.Bitmap.createBitmap(Bitmap.java:842)
at android.graphics.Bitmap.createBitmap(Bitmap.java:810)
at android.graphics.Bitmap.createBitmap(Bitmap.java:777)
at com.facebook.shimmer.ShimmerFrameLayout.createBitmapAndGcIfNecessary(ShimmerFrameLayout.java:943)
at com.facebook.shimmer.ShimmerFrameLayout.getMaskBitmap(ShimmerFrameLayout.java:822)
at com.facebook.shimmer.ShimmerFrameLayout.drawMasked(ShimmerFrameLayout.java:771)
at com.facebook.shimmer.ShimmerFrameLayout.dispatchDrawUsingBitmap(ShimmerFrameLayout.java:720)
at com.facebook.shimmer.ShimmerFrameLayout.dispatchDraw(ShimmerFrameLayout.java:697)
at android.view.View.draw(View.java:14536)
at android.widget.FrameLayout.draw(FrameLayout.java:472)
at android.view.View.getDisplayList(View.java:13417)
at android.view.View.getDisplayList(View.java:13459)
at android.view.View.draw(View.java:14250)
at android.view.ViewGroup.drawChild(ViewGroup.java:3119)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2947)
at android.view.View.getDisplayList(View.java:13412)
at android.view.View.getDisplayList(View.java:13459)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3091)
at android.view.View.getDisplayList(View.java:13355)
at android.view.View.getDisplayList(View.java:13459)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3091)
at android.view.View.getDisplayList(View.java:13355)
at android.view.View.getDisplayList(View.java:13459)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3091)
at android.view.View.getDisplayList(View.java:13355)
at android.view.View.getDisplayList(View.java:13459)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3091)
at android.view.View.getDisplayList(View.java:13355)
at android.view.View.getDisplayList(View.java:13459)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3091)
at android.view.View.getDisplayList(View.java:13355)
at android.view.View.getDisplayList(View.java:13459)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3091)
at android.view.View.getDisplayList(View.java:13355)
at android.view.View.getDisplayList(View.java:13459)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3091)
at android.view.View.getDisplayList(View.java:13355)
at android.view.View.getDisplayList(View.java:13459)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3091)
at android.view.View.getDisplayList(View.java:13355)
at android.view.View.getDisplayList(View.java:13459)
at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3091)
at android.view.View.getDisplayList(View.java:13355)
at android.view.View.getDisplayList(View.java:13459)
at android.view.HardwareRenderer$GlRenderer.buildDisplayList(HardwareRenderer.java:1612)
at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:1483)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2477)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2333)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1953)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1048)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5952)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:787)
at android.view.Choreographer.doCallbacks(Choreographer.java:600)
at android.view.Choreographer.doFrame(Choreographer.java:569)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:773)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5291)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
at dalvik.system.NativeStart.main(Native Method)
I'm getting Out of memory when using shimmer layout. Following is the log:
Fatal Exception: java.lang.OutOfMemoryError: Failed to allocate a 7970412 byte allocation with 7192266 free bytes and 6MB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(VMRuntime.java)
at android.graphics.Bitmap.nativeCreate(Bitmap.java)
at android.graphics.Bitmap.createBitmap(Bitmap.java:939)
at android.graphics.Bitmap.createBitmap(Bitmap.java:912)
at android.graphics.Bitmap.createBitmap(Bitmap.java:879)
at com.facebook.shimmer.ShimmerFrameLayout.createBitmapAndGcIfNecessary(ShimmerFrameLayout.java:949)
at com.facebook.shimmer.ShimmerFrameLayout.getMaskBitmap(ShimmerFrameLayout.java:825)
at com.facebook.shimmer.ShimmerFrameLayout.drawMasked(ShimmerFrameLayout.java:773)
at com.facebook.shimmer.ShimmerFrameLayout.dispatchDrawUsingBitmap(ShimmerFrameLayout.java:721)
at com.facebook.shimmer.ShimmerFrameLayout.dispatchDraw(ShimmerFrameLayout.java:698)
at android.view.View.draw(View.java:16205)
at android.widget.FrameLayout.draw(FrameLayout.java:592)
at android.view.View.updateDisplayListIfDirty(View.java:15122)
at android.view.View.getDisplayList(View.java:15145)
at android.view.View.draw(View.java:15923)
at android.view.ViewGroup.drawChild(ViewGroup.java:3703)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3497)
at android.view.View.draw(View.java:16205)
at android.view.View.updateDisplayListIfDirty(View.java:15122)
at android.view.View.getDisplayList(View.java:15145)
at android.view.View.draw(View.java:15923)
at android.view.ViewGroup.drawChild(ViewGroup.java:3703)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3497)
at android.view.View.updateDisplayListIfDirty(View.java:15117)
at android.view.View.getDisplayList(View.java:15145)
at android.view.View.draw(View.java:15923)
at android.view.ViewGroup.drawChild(ViewGroup.java:3703)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3497)
at android.view.View.updateDisplayListIfDirty(View.java:15117)
at android.view.View.getDisplayList(View.java:15145)
at android.view.View.draw(View.java:15923)
at android.view.ViewGroup.drawChild(ViewGroup.java:3703)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3497)
at android.view.View.draw(View.java:16205)
at android.widget.FrameLayout.draw(FrameLayout.java:592)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2923)
at android.view.View.updateDisplayListIfDirty(View.java:15122)
at android.view.View.getDisplayList(View.java:15145)
at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:275)
at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:281)
at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:320)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2753)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2586)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2178)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1191)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6641)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:777)
at android.view.Choreographer.doCallbacks(Choreographer.java:590)
at android.view.Choreographer.doFrame(Choreographer.java:560)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:763)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5942)
at java.lang.reflect.Method.invoke(Method.java)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)
used jar instead of adding it as compile statement in dependencies. worked fine in demo. but not working in project. Bcause adding dependency was giving me Error:(593) Attribute “shape” already defined with incompatible format this error.
java.lang.RuntimeException: Unable to start activity ComponentInfo
android.view.InflateException: Binary XML file line #41: Binary XML file line #41: Error inflating class com.facebook.shimmer.ShimmerFrameLayout.
The current mission statement in the main.xml
layout is hardcoded. It should instead be moved over to the strings.xml
file and referenced correctly in main.xml
Every time I use the widget in a ListView with more than 3 or 4 items using the viewholder pattern, the list items after that 3rd or 4th item does not animate.
I've tried to startAnimation programatically and also tried setting the app:auto_start attribute to true in the layout's attributes.
Hello I would like to ask why is shimmering still exist even after calling .stopShimmer() method in RecyclerView. Here's an example I am using 0.2.0 v.
//Set the user's profile picture
this.shimmerSUDP.startShimmer();
GlideApp.with(context)
.load(thumbnail)
.placeholder(R.color.icon_not_selected)
.diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model,
Target<Drawable> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable>
target, DataSource dataSource, boolean isFirstResource) {
shimmerSUDP.stopShimmer();
return false;
}
})
.into(mSuDP);
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.