帮酷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  |  如果智培  |  酷兔英语