1. 程式人生 > >Material Design實現應用動態改變色調的方法

Material Design實現應用動態改變色調的方法

作者 Yongquan.Xu

1、概述

本文針對目前FreelyUI 應用的主題色定製,利用Material design的主題顏色和tint著色特性,實現快速定製app主題顏色。

2、Material design的主題顏色控制

如下圖所示,Material Design定義了一系列的顏色用以控制應用的各種色調,本文使用主題顏色用於定義應用的各種色調。

ColorPrimary,定義應用的主色調

colorPrimaryDark,定義按鈕點選後的顏色(由於狀態使用半透著色實現漸變效果,該屬性在原先主題中已失效)

colorBackground,定義標題欄漸變色的結束顏色


3、tint特性

tint是Material Design中的新特性,可以理解為著色,把一張圖片渲染成另外一種顏色。在Android L中,EditText的下劃線背景和游標顏色變化,就是使用這種特性。

4、定義主題theme

<style name="AppTheme" parent="android:Theme.Material.Light">
  <item
name="android:windowActionBar">false</item>
  <item
name="android:windowNoTitle">true</item>
  <item

name="android:colorPrimary">#FF0000</item>
  <item
name="android:colorPrimaryDark">#FF99CC</item>
  <item
name="android:colorBackground">@android:color/white</item>
  <item
name="android:colorAccent">?android:attr/colorPrimary</item>
  <item
name="android:alertDialogTheme"
>@style/AppDialog</item>
</style>

<style
name="AppTheme.Yellow">
  <item
name="android:colorPrimary">#FFFF00</item>
  <item
name="android:colorPrimaryDark">#0000FF</item>
  <item
name="android:alertDialogTheme">@style/AppDialog.Yellow</item>
</style>

<style
name="AppTheme.Blue">
  <item
name="android:colorPrimary">#0000FF</item>
  <item
name="android:alertDialogTheme">@style/AppDialog.Blue</item>
</style>

如以上程式碼中的高亮部分,在theme中定義需要用到的顏色表

5、Tint設定

5.1靜態圖片

對於ImageView,可以設定 tint和BackgroundTint分別控制前景和背景的著色

<ImageView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:background="@drawable/music_button_round_song"
  android:src="@drawable/music_loading_icon"
  android:scaleType="centerInside"
  android:layout_marginTop="100dip"
  android:layout_centerHorizontal="true"
  android:tint="?android:attr/colorPrimary"/>

5.2selector

在selector中嵌入著色功能設定Drawable的屬性,主要用到的屬性有tint和alpha,支援的型別可以是bitmap和nine-patch

<ImageView
  android:layout_marginStart="50dip"
  android:id="@+id/btn_selector_indicate"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_alignTop="@id/btn_selector"
  android:layout_toEndOf="@id/btn_selector"
  android:src="@drawable/bg_selector"/>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_enabled="false">
    <bitmap android:alpha="?android:attr/disabledAlpha"android:src="@drawable/music_icon_suspended"
                android:tint="?android:attr/colorControlActivated"/>
  </item>

  <item android:state_pressed="true">
    <bitmap android:src="@drawable/music_icon_suspended"
                android:tint="?android:attr/colorPrimaryDark"/>
  </item>

  <item>
    <bitmap android:src="@drawable/music_icon_suspended"
            android:tint="?android:attr/colorPrimary"/>
  </item>
</selector>

5.3 layer-list + ripple

在著色的同時實現水波功能

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item>
    <bitmap android:src="@drawable/playing_next"
      android:tint="?android:attr/colorPrimary"/>
  </item>
  <item>
    <ripple android:color="#80D0D0D0">
    </ripple>
  </item>
</layer-list>
執行結果


7、總結

通過本文的方法,實現了使用Material Design主題設定應用色調的功能,降低程式碼和美工的工作量,提高效率。


相關推薦

Material Design實現應用動態改變色調方法

作者 Yongquan.Xu 1、概述 本文針對目前FreelyUI 應用的主題色定製,利用Material design的主題顏色和tint著色特性,實現快速定製app主題顏色。 2、Material design的主題顏色控制 如下圖所示,Material Des

動態改變執行方法

題目:有一個介面Processor,分別被ServiceA和ServiceB實現。 interface Processor { void process(); } class ServiceA

使用Material Design實現沉浸式狀態列+懸浮+漸變效果實現

前言 近期發現市面上很多App都採用了沉浸式狀態列效果,近期抽時間使用Material Design控制元件實現了一個,故記錄分享 程式碼實現 1、新增Material Design依賴 implementation 'com.android.su

easyUI單選框實現動態改變checked值;easyUI禁用啟用輸入框

<label >輸入最小頻段:</label> <input name="frq" id="freq1" class="easyui-numberbox" data-options=""/> <label

使用 DrawerLayout 實現 Material Design風格的側滑

mpat 內容 white eas str out top ica findview 先看效果吧! 效果一: Android 2.3 效果 Android 5.0 效果 效果二: Android 2.3 效果 Android 5.

遍歷所有子物體中renderer(渲染器)中的material(材質)並改變其alpha值實現若隱若現的效果

sys [] object c engine orm 器) gpo gin nts using UnityEngine;using System.Collections;using UnityEngine.UI; public class CubeControl : Mo

C#應用BindingSource實現數據同步的方法

som namespace tin 分享 add art creat line erb 本文以實例形式講述了C#應用BindingSource實現數據同步的方法,對C#數據庫程序開發來說具有一定的參考借鑒價值。具體實現方法如下: 下面的代碼示例演示如何使用 Binding

利用Django中的url方法實現地址動態拼接自動生成超鏈接地址

蝴蝶 控制 可選 編寫 alt .html url pytho 條件 目標 建立一個圖書列表頁面,顯示圖書名列表,並實現點擊書名跳轉到圖書詳細頁面,顯示圖書詳細信息。 URL方法簡介 功能:返回一個絕對路徑的引用(不包含域名的URL);該引用匹配一個給定的視圖函數和 一

轉載 * jQuery實現動態分割div—通過拖動分隔欄實現上下、左右動態改變左右、上下兩個相鄰div的大小

鼠標 動態改變 win 上下 key mousedown pre console ati 由jQuery實現上下、左右動態改變左右、上下兩個div的大小,需要自己引入jquery1.8.0.min.js包 可用於頁面布局。 //======================

實現tkinter中button形狀改變方法

  最近在做的一個類似掃雷的小遊戲,需要通過點選一些小圓圈使其變色,我的第一個想法就是使用tkinter中的button部件,繫結相應的響應函式使其在被點選時變色,然而tkinter中的button元件預設為矩形,且沒有形狀屬性,無法變更為圓形,經過一番探索,找到了以下兩個辦法。   一、使用c

vue自定義進度條的製作方法(含css屬性值的兩種動態改變方式)

雛形部分接上一篇文章:https://blog.csdn.net/ColourfulTiger/article/details/82910505 結合vue製作自定義的進度條,優勢在於採用了vue特有的樣式繫結,與雙向繫結的方法,達到資料與進度條的進度一致。 突破點:通過變數來動態改變屬性對

Material Design 實戰 之 第六彈 —— 可摺疊式標題欄(CollapsingToolbarLayout) & 系統差異型的功能實現(充分利用系統狀態列空間)...

本模組共有六篇文章,參考郭神的《第一行程式碼》,對Material Design的學習做一個詳細的筆記,大家可以一起交流一下: Material Design 實戰 之第一彈——Toolbar(即本文) Material Design 實戰 之第二彈——滑動選

vue點選時動態改變樣式 ------- 最簡單的方法

vue點選時動態改變樣式template中 <li :class="{ active:index==isActive }" @click="changeValue(index)" v-for="( item , index ) in items" :key="item.CategoryId"

Android 根據從伺服器中獲取的rgb值實現動態改變圓角加框的Imageview 的背景色

先上圖,效果圖如上。 本來考慮用facebook的SimpleDraweeView 來實現圓角加框的,但並非所有的圖片分支部分都可以實現圓角,目前只有佔位圖片和實際圖片可以實現圓角。 後來使用自定義的的控制元件RoundImageView來實現圓角加框,那麼問題來了。

vue動態改變每個表頭的方法

fff get head style 註冊 reat ron 字段 eat 第一步:router裏邊設置每一個頁面的標頭 { path: ‘/‘, name: ‘Home‘, component: Home, meta: { keepAlive: false, // 頁面

python元編程之使用動態屬性實現定制類--特殊方法__setattr__,__getattribute__篇

基礎 數組 使用 style expect slots asa rom 添加 問題:實現一個類,要求行為如同namedtuple:只存在給定名稱的屬性,不允許動態添加實例屬性。 主要知識點在於: __setattr__,__getattr__,getattribute__,

CoordinatorLayout等控制元件實現Google Material Design效果

本文介紹以下很 google的UI控制元件:CoordinatorLayout、AppbarLayout、NestedScrollView以及CollapsingToolbarLayout。它們共同實現了下面這樣的效果: 初始控制元件 「Coordinat

【移動端】基於rem實現手機端頁面自適應--動態改變dpr和font-size

這兩天還是在寫手機端的那個表單頁面,我好苦惱啊。明明在chrome上除錯的時候都是可以的,但是真的用手機去掃碼看的時候,就出現問題了。 蘋果手機麼有問題,都是根據dpr來設定meta標籤,動態設定font-size,顯示的跟預期的一樣。用三星手機掃也是可以的,

Unity中動態改變物體的Material(Shader)

在Unity中,我們在進行物體控制和互動過程中經常會涉及到動態改變Shader的情況,如將一個三維物體用網格顯示、將三維物體的表現形式進行變更等等。 在Unity中主要通過MeshRenderer元件進行控制,我們可以通過獲取指定物體的MeshRenderer