ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

android – java.lang.IllegalStateException:恢复时下溢 – 恢复多于保存

2019-10-08 04:27:04  阅读:282  来源: 互联网

标签:ripple android rippledrawable


我正在为我的项目使用rippleeffect库.但是在Android Nougat和Marshmallow中,由于这个库App崩溃了:

编译’com.github.traex.rippleeffect:library:1.3′

错误消息是:

FATAL EXCEPTION: main
Process: com.test.testapp, PID: 17713
java.lang.IllegalStateException: Underflow in restore – more restores than saves
at android.graphics.Canvas.native_restore(Native Method)
at android.graphics.Canvas.restore(Canvas.java:522)
at com.andexert.library.RippleView.draw(RippleView.java:170)
……………………
……………………

就以下链接而言,这是一个已知问题. https://github.com/traex/RippleEffect/issues/76和我也尝试过stackoverflow的很多解决方案,但到目前为止运气确实有利!

可以做些什么来解决这个问题?

解决方法:

我遇到了同样的问题,并没有找到一个好的解决方案.但如果你

>将targetSdkVersion降级到22你可以运行它:意味着它不会崩溃!但我真的不建议这样做.
>尝试使用编译此依赖项来编译它 – >’com.github.emanzanoaxa:RippleEffect:52ea2a0ab6′
>调用canvas.save();在每次恢复之前()是你的链接的另一个建议,你可以试试
>您还可以尝试在项目中添加该库并使用它

https://codeload.github.com/traex/RippleEffect/zip/master(从您提供的链接中,有人尝试使用它们的解决方案)

或者我建议你自己创建它们根本不需要库!

在Android 5.0(API级别21)中引入了波纹触摸效果,并且动画由新的RippleDrawable类实现.

一般情况下,常规按钮的涟漪效果在API 21中默认工作,对于其他可触摸视图,可以通过指定:

机器人: “ATTR / selectItemBackground” 背景=

对于视图中包含的涟漪或:

机器人: “ATTR / selectItemBackgroundBorderless” 背景=

对于超出视图范围的涟漪.

您可以使用以下代码实现相同的功能:

int[] attrs = new int[]{R.attr.selectItemBackground};
TypedArray typedArray = getActivity().obtainStyledAttributes(attrs);
int backgroundResource = typedArray.getResourceId(0, 0);
myView.setBackgroundResource(backgroundResource);

如果要将涟漪效果自定义为视图,
您需要在drawable目录中创建一个新的XML文件.

例子:

例1:无界波纹

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="#ffff0000" />

示例2:具有蒙版和背景颜色的波纹

<ripple android:color="#7777666"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/mask"
        android:drawable="#ffff00" />
    <item android:drawable="@android:color/white"/>
</ripple>

示例3:可绘制资源顶部的波纹

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="#ff0000ff">
    <item android:drawable="@drawable/my_drawable" />
</ripple>

如何使用:
要将ripple xml文件附加到任何视图,请将其设置为背景,如下所示:
假设您的ripple文件名为my_ripple.xml.例如1,2或3

<View 
    android:id="@+id/myViewId"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/my_ripple" />

标签:ripple,android,rippledrawable
来源: https://codeday.me/bug/20191008/1870513.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有