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
<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>
<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
(1)實驗要求: 掌握常用的排序方法及其實現方法; 深刻理解排序的定義和各種排序方法的特點, 並能 加以靈活應用; 瞭解各種方法的排序過程及其依據的原則, 度的分析方
#include<stdio.h> #include<stdlib.h> #include<conio.h> #define n 3 struct student { char name[10]; int score; }R[n]; int main() {
【移動端】基於rem實現手機端頁面自適應--動態改變dpr和font-size
這兩天還是在寫手機端的那個表單頁面,我好苦惱啊。明明在chrome上除錯的時候都是可以的,但是真的用手機去掃碼看的時候,就出現問題了。 蘋果手機麼有問題,都是根據dpr來設定meta標籤,動態設定font-size,顯示的跟預期的一樣。用三星手機掃也是可以的,
Unity中動態改變物體的Material(Shader)
在Unity中,我們在進行物體控制和互動過程中經常會涉及到動態改變Shader的情況,如將一個三維物體用網格顯示、將三維物體的表現形式進行變更等等。 在Unity中主要通過MeshRenderer元件進行控制,我們可以通過獲取指定物體的MeshRenderer