本篇是根據 +Roman Nurik 在 2014/11/24 發佈的一篇 G+ 而來。看到他發文後,起了好奇心,就根據他提出的方法嘗試著實作,並將之排列呈現,直接從視覺上做個比較。

他在 G+ 的發文中提出一個做法,改良原本看起來有點單調的漸層,改變線性到三次項的梯度呈現,使之看起來更加順眼,而將之定名為「Gradient Scrims」。然後,本篇的呈現原則上還是在 Android 5 以上的版本可以看到最佳效果哦 

先看到結果,如下圖:左邊是我們平常的使用習慣,右邊是改變做法的呈現。

原則上,我們過去在 Android 開發的漸層處理,就是用 drawable 來實作之,以本範例來說,drawable 的程式碼如下:

1
2
3
4
5
6
7
8
9
10
11

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item>
    <shape android:shape="rectangle">
      <gradient android:startColor="@color/primary_dark"
        android:endColor="@android:color/transparent"
        android:angle="90"
        />
    </shape>
  </item>
</selector>

口語來說,就是定義了一個由藍到透明的漸層方形圖,並將之轉向 90 度,好讓藍色的部份可以如上左圖般,像是從 navigation bar 延伸上去的顏色。

這樣的漸層過去也就是被設定在該文字區塊中,也就像本圖例中的樣子,

1
2
3
4
5
6

<LinearLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:background="@drawable/gradlient_background"
...

而這樣是一個線性的呈現,看起來也比較僵化點,所以 Roman 提出了一個做法,將這條曲線從線性改成三次曲線,同時,將這個這個漸層文字區塊擴張到這個畫面。這個效果的程式碼是即將被使用在Muzei 中的 ScrimUtil(撰文的這個時間點還未被使用)。

而 Scrim 的使用方式大至上如下:

1
2
3
4
5
6
7
8

if(Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
  View bottom = findViewById(R.id.view_base_bottom);
  bottom.setBackground(
    ScrimUtil.makeCubicGradientScrimDrawable(
     getResources().getColor(R.color.primary_dark), //顏色
     8, //漸層數
     Gravity.BOTTOM)); //起始方向
}

bottom 是一個全畫面的 layout 元件,使用 makeCubicGradientScrimDrawable 這個函式來計算,我們要在這個漸層中分出幾個梯度出來。也許就是因為這個梯度效果看起來像是紡織布的樣子,所以才被 Roman 定名為 Gradient Scrim 吧。至於要分成多少梯度就全看大家的需求嘍。

最後下方的三張圖,左邊跟中間的兩張圖,都是採用了 Gradient Scrim 的方式呈現漸層。中間那張主要是拿掉了上面的漸層效果,好跟右邊全畫面的線性漸層做個比較

補充:下方這三張在中間插入了另一個介面設定,左邊是原線性的處理方式;右邊是全面的 gradient scrims 介面;

上圖新加入的中間那張是根據文字區塊的大小,再加上 padding 的高度,讓漸層更聚焦在該區塊中。

1
2
3
4
5
6

<LinearLayout
  android:id="@+id/view_base_bottom"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:paddingTop="@dimen/gradient_scrim_padding"
...

不知道各位比較喜歡哪種呢 

ANDROID – 單色漸層效果的改良 – GRADIENT SCRIMS(转)相关推荐

  1. android特效按钮点击效果

    2019独角兽企业重金招聘Python工程师标准>>> android特效按钮点击效果,动画从里到外渐变放大散花效果,本例子适合做一些特效的app使用, 使用很简单,直接可以把里面代 ...

  2. android仿微信的activity平滑水平切换动画,Android实现简单底部导航栏 Android仿微信滑动切换效果...

    Android实现简单底部导航栏 Android仿微信滑动切换效果 发布时间:2020-10-09 19:48:00 来源:脚本之家 阅读:96 作者:丶白泽 Android仿微信滑动切换最终实现效果 ...

  3. android双重for循环,Android实现ViewPager无限循环效果(二)

    本文实例为大家分享了Android实现ViewPager无限循环效果的第二种方式,供大家参考,具体内容如下 原理:在Adapter中将getCount设置为无限大 package com.xiaoma ...

  4. 50个Android开发人员必备UI效果源码[转载]

    Android 仿微信之主页面实现篇 Android 仿微信之界面导航篇 Android 高仿QQ 好友分组列表 Android 高仿QQ 界面滑动效果 Android 高仿QQ 登陆界面 Andro ...

  5. Android中RatingBar的自定义效果

    Android中RatingBar的自定义效果 有时候android系统提供给我们的ratingbar效果并不达到我们的要求,这个时候就可以自定义自己喜欢的ratingbar. 从上面的效果可以看出, ...

  6. android中仿qq最新版抽屉,Android 自定义View实现抽屉效果

    Android 自定义View实现抽屉效果 说明 这个自定义View,没有处理好多点触摸问题 View跟着手指移动,没有采用传统的scrollBy方法,而是通过不停地重新布局子View的方式,来使得子 ...

  7. android中设置Animation 动画效果

    在 Android 中, Animation 动画效果的实现可以通过两种方式进行实现,一种是 tweened animation 渐变动画,另一种是 frame by frame animation ...

  8. Android 自定义 圆环,Android自定义view实现圆环效果实例代码

    先上效果图,如果大家感觉不错,请参考实现代码. 重要的是如何实现自定义的view效果 (1)创建类,继承view,重写onDraw和onMesure方法 public class CirclePerc ...

  9. Android实现支付宝AR功能,Android RecyclerView 实现支付宝首页效果

    Android RecyclerView 实现支付宝首页效果 [TOC] 虽然我本人不喜欢支付宝的,但是这个网格本身其实还是不错的,项目更新中更改了一个布局为网格模式,类似支付宝.(估计是产品抄袭的= ...

最新文章

  1. linux 安装分区设置分区大小
  2. python nonetype转换float_如何在Python中将NoneType值从聚合转换为float?
  3. OpenCV支持向量机SVM用于非线性可分离数据
  4. 基于 ida 的反汇编转换 Obj 的可行性 笔记(2)
  5. 笨办法学C 练习45:一个简单的TCP/IP客户端
  6. python中os模块里有哪些类_python-os模块的常用方法
  7. Postresql初始安装后用户的创建
  8. SQL Server 日期和时间函数
  9. SSH Tunnel扫盲(ssh port forwarding端口转发)
  10. TP5报错variable type error: array
  11. Matlab 编程 《计算流体力学基础及应用(约翰D安德森)》 亚声速-超声速等熵喷管流动CFD解法 拉瓦尔喷管 守恒形式方程解法
  12. 【回归预测-ELM预测】基于遗传算法优化极限学习机实现风电数据回归预测附matlab代码
  13. 快速记住《计算机文化基础》海量题法
  14. leetcode + 腾讯面试
  15. OpenERP的外贸企业ERP方案
  16. 计算机网络通信模型之cs模式(一)简单的socket
  17. 大数据分析应用领域有哪些
  18. POI excel单元格中内容换行
  19. 狙击美佐 基于WordPress的个人博客网站
  20. 我对移动端架构的思考

热门文章

  1. Mac:Permission denied XXX
  2. libhv教程11--创建一个简单的HTTP客户端
  3. python怎么停止正在运行的代码_在python中,如何停止正在执行的函数中的代码?...
  4. Count UVA - 1645
  5. 【正点原子Linux连载】第三十七章 Linux内核移植 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
  6. 五个了解自己天赋优势的分析工具(一)霍兰德兴趣测试
  7. ros中的电机速度控制_ROS 学习系列-- 四轮机器人线性速率、角速度和电机PWM线性关系的定量分析...
  8. Java课程设计-实验室预约管理系统
  9. 快过年了,用五种不同的JS特效带你看烟花
  10. Teardrop代码编程,伪造一个虚假地址的IP包和SOCKET应用实例