1. 程式人生 > >用一張圖片實現按鈕按下和普通效果的樣式

用一張圖片實現按鈕按下和普通效果的樣式

第一種方法(強烈推薦)

方法:selector做遮罩,原圖做background。

我們做按鈕的時候經常需要用兩個圖片來實現按鈕點選和普通狀態的樣式,這就需要提供兩種圖片,而且每個解析度下還有多套圖片,大大增加了apk的大小。

我們希望讓這兩張圖片合二為一,而且還能實現兩種或者多種狀態,怎麼做呢?我們首先建立一個圓形的selector,正常情況下是完全透明的,按下後透明度變小。

normal_bg_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
> <item android:state_pressed="true"> <shape android:shape="oval"> <solid android:color="#21000000" /> </shape> </item> <item> <shape android:shape="oval"> <solid android:color="#00000000" /> </
shape> </item> </selector>

然後只需要問美工拿一張圖片就好了,比如這張:

關鍵的一步來了,現在我們需要把selector檔案當作遮罩,然後用上面的藍色icon作為bg,放到一個ImageButton中:

<ImageButton
        android:layout_width="100dp"
        android:layout_height="100dp"
       
        android:src="@drawable/normal_bg_selector"
        android:background
="@drawable/blue_btn_icon" />

最後只需要調整下padding就好了,如果你需要矩形的圖片,就按照上面的方法建立一個矩形的遮罩即可。如果你們公司用的圓角矩形,直接問設計師要個圓角的標準就行,再建立一個selector檔案吧。下面是最簡單的原型和矩形的遮罩檔案:

normal_oval_mask_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true">
        <shape android:shape="oval">
            <solid android:color="#21000000" />
        </shape>
    </item>

    <item>
        <shape android:shape="oval">
            <solid android:color="#00000000" />
        </shape>
    </item>
</selector>

normal_rectangle_mask_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <solid android:color="#21000000" />
        </shape>
    </item>

    <item>
        <shape android:shape="rectangle">
            <solid android:color="#00000000" />
        </shape>
    </item>
</selector>

第二種方法(不推薦)

當然我們還有另一種方法來實現這個效果,用的是layer-list。先放一個selector做的遮罩,然後在遮罩下面疊加一個button的icon。這樣就做好button按下後的樣式。

blue_btn_selector_layerlist.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list   xmlns:android="http://schemas.android.com/apk/res/android">    
    <item android:drawable="@drawable/blue_btn_icon" />    
    <item android:drawable="@drawable/blue_btn_mask_shape" />    
</layer-list> 

現在我們有了按鈕普通的樣式和按鈕按下的樣式,之後就可以建立一個selector:

blue_button_bg_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:state_pressed="true"
        android:drawable="@drawable/blue_btn_selector_layerlist" />

    <item
        android:drawable="@drawable/blue_btn_icon" />
</selector>

最後就只需要在button的background設定這個blue_button_bg_selector.xml就行了。第二種方法明顯就比較繁瑣,需要多建立一個檔案,沒有模組化。

參考自:

http://blog.sina.com.cn/s/blog_783ede030101ixr9.html

相關推薦

圖片實現按鈕普通效果樣式

第一種方法(強烈推薦) 方法:selector做遮罩,原圖做background。 我們做按鈕的時候經常需要用兩個圖片來實現按鈕點選和普通狀態的樣式,這就需要提供兩種圖片,而且每個解析度下還有多套圖片,大大增加了apk的大小。 我們希望讓這兩張圖片合二為一,而且還能實現兩種或者多種狀態,怎麼做呢?我

Android selector 最佳寫法 圖片實現按鈕普通效果樣式

第一種方法(強烈推薦) 方法:selector做遮罩,原圖做background。 我們做按鈕的時候經常需要用兩個圖片來實現按鈕點選和普通狀態的樣式,這就需要提供兩種圖片,而且每個解析度下還有多

Android圖片實現簡單動畫效果

直接在java程式碼裡寫圖片佈局,而不用XML檔案。 先宣告定義: ImageView imageviewsudubg; ImageView imageviewsudu; LinearLayout l

VC++中獨立捕獲按鈕擡起兩個動作

BOOL CRealButtonDlg::OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult) { switch(message) { case 9999: if(wParam == 1) // 按鈕被滑鼠

實現ipad上的內嵌webview手勢縮放圖片(修改版,解決在第一圖片放大的情況翻到圖片無法放大的問題) 基於Quo(js庫)

      這是自己在一個專案中用到的,可以根據手勢(兩個手指的拖放放大1.2,1.4,1.6倍圖片,然後捏放下回復到原來大小,只要修改引數就可以無限放大和縮小圖片的倍數) 下面是quo支援的手勢: 以下為實現ipad  iso 上面的web頁面(jsp)放大三倍,

多組input檔案,每組 multiple選擇多圖片上傳可增刪其中任意圖片formData物件實現;(ajax做非同步,自己做延時同步)

input 、multiple選擇多張圖片時,需要刪除其中的一張圖片怎麼做,大家都知道 input 中的檔案是不能刪除和更改的,只能清空,這裡我的做法是 定義一個物件儲存器把需要的檔案存在儲存器中 formData,後臺不從Input中讀取,從物件儲存器中獲取檔案,一組圖片使

android 實現圖片旋轉,移動,縮放,並且記錄變化值,另外圖片顯示出來

最近公司要做一個戒指試戴的功能,就是把戒指通過手勢移動到你指定的手指處,並且儲存狀態,方便下次進入時顯示,可以參考APP“鑽石快線”的試戴功能, 圖片網上有很多的教程教你怎麼把圖片旋轉,移動,縮放,等等,卻沒有教你儲存狀態,而且網上的教程都亂七八糟,都是複製貼上,都不是自己

點選按鈕檢視上圖片

<head>     <title></title>     <style type="text/css">     #d1   {       float:left;       margin-top:300px;     

MFC實現當滑鼠移動到button按鈕上時是顯示圖片,移開顯示另外,點選是顯示另外

程式設計中,經常要用到按鈕控制元件,大部分情況下,文字按鈕就OK了,但有時為了更好的效果,需要用到圖形按鈕。 在MFC中,應用CBitmapButton就可以實現圖形按鈕。CBitmapButton類繼承自CButton類。你可以為圖形按鈕指定四張圖片,分別對應按鈕的四種

Android高效內存1:圖片多少內存

像素 更多 內存 加載 手機 mic style 占用 們的   在做內存優化的時候,我們發現除了解決內存泄露問題,剩下的就只有想辦法減少真實的內存占用。而在App中,大部分內存可能被我們圖片占用了,所以減少圖片的內存占用可以帶來直接的效果。本文就簡單介紹一張圖片到底占用多

js中onchange()的使用,實現功能,選擇哪圖片,顯示哪

pla option type oct 圖片 script www () height 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/x

拷貝圖片,從一個目錄到另外一個目錄(PS:是拷貝是不是移動)

close pan 圖片路徑 com oid 一個 != 文件路徑 while package com.lanxi.demo2_6; import java.io.File; import java.io.FileInputStream; import java.io.

深度學習圖片過大--------------實現圖片裁剪成二圖片併合並

import os import cv2 import numpy as np import tqdm #cv2讀取一律寫成預設模式 #path = 'D:\\program\\fast-neural-style-tensorflow-master\\C\\pic\\' path = 'D:\\pr

使用OpenOffice外掛實現RTF/WORD轉PDF轉多圖片或者圖片

這裡我們使用的是OpenOffice外掛,需要安裝,還有相關的jar包 網盤地址: https://pan.baidu.com/s/1c6HymABx3wre-d19eB1c-w      密碼: n1cd 安裝OpenOffice完成後 W

java實現PDF轉圖片(每頁轉換成圖片,可單頁轉換或指定頁數)

話不多說,直接上程式碼 public class PDF2IMAGE { public static void main(String[] args) { if(args!=null && args.length>=4) {

VC++實現圖片迴圈滾動

1.載入圖片 CBitmap bmp_bk;  bmp_bk.LoadBitmapA(IDB_BMP_SKY);//為你的背景圖片 2.把圖片選上記憶體dc  CClientDC dc(this);  CDC Bkmdc;  Bkmdc.CreateCompatibleD

OpenCV 學習(四)之 將圖片插入另圖片中的實現(ROI)

/** * 將一張圖片插入另一種圖片中 */ static void exam2() { Mat image = Imgcodecs.imr

android 開發 View _12_ Canvas 繪製圖片(部落格中演示Canvas畫驗證碼圖片

package net.yt.yuncare.widgets; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import and

android 在 button、textview等控制元件選中的時候改變顏色或圖片實現方法

首先,在res資料夾下新建一個資料夾drawable,這是無關解析度的: 在下面建立一個xml檔案:select.xml 方法1 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android

js簡單的通過點選“上”“圖片切換

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/x