帮酷LOGO
  • 显示原文与译文双语对照的内容
A library for supporting convex material shadows

  • 源代码名称:MaterialShadows
  • 源代码网址:http://www.github.com/harjot-oberai/MaterialShadows
  • MaterialShadows源代码文档
  • MaterialShadows源代码下载
  • Git URL:
    git://www.github.com/harjot-oberai/MaterialShadows.git
  • Git Clone代码到本地:
    git clone http://www.github.com/harjot-oberai/MaterialShadows
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/harjot-oberai/MaterialShadows
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • MaterialShadows

    PlatformAPILicense: MIT

    用于无缝集成材质阴影的库。 通过添加以下功能,库将现有材质阴影添加到下一层:

    • 凸面阴影:阴影不仅是矩形或者圆形,它们可以根据视图和它的内容获取任意凸面形状。
    • 支持阴影偏移:库允许开发人员为阴影设置X 和Y 偏移。
    • 支持阴影强度:库还支持通过 shadowAlpha 属性设置阴影强度。
    • 半透明视图阴影:库允许半透明视图的阴影。
    • 支持异步影子计算: 库允许操作是异步的,以避免在长时间计算时阻塞UI线程。
    • 阴影动画:库支持阴影的淡出动画。
    用法

    只需在你的应用程序 build.gradle 中添加以下依赖项

    dependencies {
     implementation 'com.sdsmdg.harjot:materialshadows:1.2.5'}
    第三方绑定

    反应本机。
    现在你可以通过这里的react-nativeSingh Chauhan 来使用这个库与通过 MODULE 。

    :这是如何工作的

    MaterialShadowViewWrapperRelative Layout的扩展。 MaterialShadowFrameLayoutWrapperFrameLayout的扩展。 根据你的方便使用其中之一。

    所有子视图都通过下面给出的生成阴影的过程:

    • 首先从视图的图形缓存生成位图。
    • 图像按像素遍历像素,删除所有透明像素并获取与视图内容实际轮廓相对应的点列表。
    • 因为与轮廓相对应的点可以以给出凹路,所以GrahamScan算法用于生成凸轮点的凸壳。
    • 一条路径是从产生的凸面壳的点创建的。
    • 这里路径传递给稍后附加到视图本身的CustomViewOutlineProvider 对象。
    • 因此,我们得到了基于它的内容的任何类型的视图的凸阴影。

    P.S 。: 默认情况下,所有与graham扫描相关的计算都是异步完成的。 这里行为可以由 calculateAsync 参数控制。 ( 感谢 Yaroslav ) !

    示例用法 1 ( 简单)XML格式的XML
    <com.sdsmdg.harjot.materialshadows.MaterialShadowViewWrapper
     android:layout_width="match_parent"android:layout_height="match_parent">
     <ImageViewandroid:layout_width="130dp"android:layout_height="130dp"android:elevation="5dp"android:src="@drawable/poly"/>
    </com.sdsmdg.harjot.materialshadows.MaterialShadowViewWrapper>
    结果

    示例用法 2 ( 偏移量)XML格式的XML
    <com.sdsmdg.harjot.materialshadows.MaterialShadowViewWrapper
     android:layout_width="match_parent"android:layout_height="match_parent"app:shadowOffsetX="-15"app:shadowOffsetY="30">
     <ImageViewandroid:layout_width="130dp"android:layout_height="130dp"android:elevation="10dp"android:src="@drawable/poly"/>
    </com.sdsmdg.harjot.materialshadows.MaterialShadowViewWrapper>
    结果

    示例用法 3 ( 阴影强度)XML格式的XML
    <com.sdsmdg.harjot.materialshadows.MaterialShadowViewWrapper
     android:layout_width="match_parent"android:layout_height="match_parent"app:shadowOffsetX="15"app:shadowOffsetY="30"app:shadowAlpha="0.9">
     <ImageViewandroid:layout_width="130dp"android:layout_height="130dp"android:elevation="10dp"android:src="@drawable/poly"/>
    </com.sdsmdg.harjot.materialshadows.MaterialShadowViewWrapper>
    结果

    示例用法 4 ( 半透明视图)XML格式的XML
    <com.sdsmdg.harjot.materialshadows.MaterialShadowViewWrapper
     android:layout_width="match_parent"android:layout_height="match_parent"app:shadowOffsetX="-30"app:shadowOffsetY="30">
     <ImageViewandroid:layout_width="130dp"android:layout_height="130dp"android:elevation="10dp"android:background="#55000000"/>
    </com.sdsmdg.harjot.materialshadows.MaterialShadowViewWrapper>
    结果

    使用MaterialShadows和自定义 ViewGroups

    由于 ShadowGenerator.java 封装了与凸阴影相关的所有代码,因这里很容易插入任何自定义with或者 LinearLayout 等平台。

    publicclassCustomShadowWrapperextendsCustomViewGroup {
     ShadowGenerator shadowGenerator;
     @OverrideprotectedvoidonLayout(booleanchanged, intl, intt, intr, intb) {
     super.onLayout(changed, l, t, r, b);
     if (shadowGenerator ==null) {
     shadowGenerator =newShadowGenerator(this, offsetX, offsetY, shadowAlpha, shouldShowWhenAllReady, shouldCalculateAsync, shouldAnimateShadow, animationDuration);
     }
     shadowGenerator.generate();
     }
     @OverrideprotectedvoidonDetachedFromWindow() {
     super.onDetachedFromWindow();
     if (shadowGenerator !=null) {
     shadowGenerator.releaseResources();
     }
     }
    }

    注意:确保在定制包装中定义 ShadowGenerator 所需的所有 7个参数,即 offsetXoffsetYshadowAlphashouldShowWhenAllReadyshouldCalculateAsyncshouldAnimateShadowanimationDuration,并处理它们的值变化。

    如果任何参数值更改,请说 offsetX,在 offsetX的setter方法内添加以下代码:

    publicvoid setOffsetX(float offsetX) {
     this.offsetX = offsetX;
     if (shadowGenerator !=null) {
     shadowGenerator.setOffsetX(offsetX);
     }
    }

    如果你想在 CustomShadowWrapper 类中添加自定义XML属性,请将它的添加到 attrs.xml ( 这里是 ),并在 CustomShadowWrapper 类中处理它们。

    <declare-styleablename="CustomShadowWrapper">
     <attrname="shadowOffsetX"/>
     <attrname="shadowOffsetY"/>
     <attrname="shadowAlpha"/>
     <attrname="calculateAsync"/>
     <attrname="showWhenAllReady"/>
     <attrname="animateShadow"/>
     <attrname="animationDuration"/>
     </declare-styleable>

    有关详细信息,请参阅 MaterialShadowViewWrapper

    文档XML属性Java集方法说明默认值
    shadowOffsetXsetOffsetX ( 。)设置阴影的x 偏移0.0f
    shadowOffsetYsetOffsetX ( 。)设置阴影的y 偏移0.0f
    shadowAlphasetShadowAlpha ( 。)设置阴影强度的值( alpha )1.0f
    calculateAsyncsetShouldCalculateAsync ( 。)设置异步阴影计算的标志。true
    showWhenAllReadysetShowShadowsWhenAllReady ( 。)设置在所有计算结束后显示所有阴影的标志true
    animateShadowsetShouldAnimateShadow ( 。)设置阴影动画的标志true
    animationDurationsetAnimationDuration ( 。)设置阴影动画持续时间的值。300ms
    限制
    • 由于位图是通过像素遍历像素的,所以大视图的性能很差。 因此,图书馆的使用仅限于小的视图。
    • 目前,阴影只为 MaterialShadowViewWrapper的直接子元素生成。 因这里,如果所需视图放在线性布局或者它的他视图组中,则每个视图都必须被独立的MaterialShadowViewWrapper 或者 MaterialShadowFrameLayoutWrapper 包装。
    • MaterialShadowViewWrapper 或者自定义视图组包装的每个子级指定为相同的偏移和阴影强度。 如果需要对视图的每个阴影进行精细控制,那么必须将它的包装在自己的MaterialShadowViewWrapper 或者 MaterialShadowFrameLayoutWrapper 中。
    • Credits
    • Yaroslav: 异步计算和阴影动画的实现。
    • Pranav Raj Singh Chauhan: 为图书馆构建反应式原生桥插件。
    • 许可证

    MaterialShadows在 MIT license 下许可。 查看许可协议。




    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语