外面用布局
在饒平等地區(qū),都構建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供成都網(wǎng)站建設、成都網(wǎng)站設計 網(wǎng)站設計制作定制網(wǎng)站設計,公司網(wǎng)站建設,企業(yè)網(wǎng)站建設,品牌網(wǎng)站設計,營銷型網(wǎng)站,成都外貿(mào)網(wǎng)站建設公司,饒平網(wǎng)站建設費用合理。
設置布局的背景為圖片
然后布局里面添加一個button
android中button上設置圖片的方法為:
1、自定義MyButton類
public class MyButton extends Button {
//This constructormust be
public MyButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyButton(Context context) {
super(context);
}
private Paint mPaint = null;
private String mText;
private int mX, mY;
public void onSetText(String text, int nLeft, int nBottom, int nTextSize,
int nTextColor) {
mPaint = new Paint();
mPaint.setTextSize(nTextSize);
mPaint.setColor(nTextColor);
this.mText = text;
this.mX = nLeft;
this.mY = nBottom;
}
private int mDownBmpId, mUpBmpId;
public void onSetBmp(int nDownID, int nUpID) {
this.mDownBmpId = nDownID;
this.mUpBmpId = nUpID;
}
@Override
public void onDraw(Canvas canvas) {
if (mPaint != null)
canvas.drawText(mText, mX, mY, mPaint);
super.onDraw(canvas);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
super.setBackgroundResource(mDownBmpId);
} else if (event.getAction() == MotionEvent.ACTION_UP) {
super.setBackgroundResource(mUpBmpId);
}
return super.onTouchEvent(event);
}
}
2、 在xml布局文件中添加MyButton控件,像應用普通的Button控件一樣。
com.MyButton
android:id="@+id/test_btn" android:layout_width="120px"
android:layout_height="fill_parent" android:text="Test"
android:background="@drawable/btn_u" /
其中com.MyButton是你定義的MyButton類所在的包名
3、在onCreate()中加載MyButton控件。
MyButton btn = (MyButton)findViewById(R.id.test_btn);
btn.onSetBmp(R.drawable.btn_d, R.drawable.btn_u);
其中btn_d表示為按下btn時背景圖片,btn_u為默認狀態(tài)下btn背景圖片。
android懸浮按鈕(Floating action button)的兩種實現(xiàn)方法
最近android中有很多新的設計規(guī)范被引入,最流行的莫過于被稱作Promoted Actions的設計了,Promoted Actions是指一種操作按鈕,它不是放在actionbar中,而是直接在可見的UI布局中(當然這里的UI指的是setContentView所管轄的范圍)。因此它更容易在代碼中被獲取到(試想如果你要在actionbar中獲取一個菜單按鈕是不是很難?),Promoted Actions往往主要用于一個界面的主要操作,比如在email的郵件列表界面,promoted action可以用于接受一個新郵件。promoted action在外觀上其實就是一個懸浮按鈕,更常見的是漂浮在界面上的圓形按鈕,一般我直接將promoted action稱作懸浮按鈕,英文名稱Float Action Button?簡稱(FAB,不是FBI哈)。
float?action?button是android l中的產(chǎn)物,但是我們也可以在更早的版本中實現(xiàn)。假設我這里有一個列表界面,我想使用floataction?button代表添加新元素的功能,界面如下:
要實現(xiàn)float?action?button可以有多種方法,一種只適合android L,另外一種適合任意版本。
用ImageButton實現(xiàn)
這種方式其實是在ImageButton的屬性中使用了android L才有的一些特性:
ImageButton
android:layout_width="56dp"
android:layout_height="56dp"
android:src="@drawable/plus"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginRight="16dp"
android:layout_marginBottom="16dp"
android:tint="@android:color/white"
android:id="@+id/fab"
android:elevation="1dp"
android:background="@drawable/ripple"
android:stateListAnimator="@anim/fab_anim"
/
仔細一點,你會發(fā)現(xiàn)我們將這個ImageButton放到了布局的右下角,為了實現(xiàn)float?action?button應該具備的效果,需要考慮以下幾個方面:
·Background
·Shadow
·Animation
背景上我們使用ripple drawable來增強吸引力。注意上面的xml代碼中我們將background設置成了@drawable/ripple?,ripple drawable的定義如下:
ripple xmlns:android="" android:color="?android:colorControlHighlight"
item
shape android:shape="oval"
solid android:color="?android:colorAccent" /
/shape
/item
/ripple
既然是懸浮按鈕,那就需要強調(diào)維度上面的感覺,當按鈕被按下的時候,按鈕的陰影需要擴大,并且這個過程是漸變的,我們使用屬性動畫去改變translatioz。
selector xmlns:android=""
item
android:state_enabled="true"
android:state_pressed="true"
objectAnimator
android:duration="@android:integer/config_shortAnimTime"
android:propertyName="translationZ"
android:valueFrom="@dimen/start_z"
android:valueTo="@dimen/end_z"
android:valueType="floatType" /
/item
item
objectAnimator
android:duration="@android:integer/config_shortAnimTime"
android:propertyName="translationZ"
android:valueFrom="@dimen/end_z"
android:valueTo="@dimen/start_z"
android:valueType="floatType" /
/item
/selector
使用自定義控件的方式實現(xiàn)懸浮按鈕
這種方式不依賴于android L,而是碼代碼。
首先定義一個這樣的類:
public class CustomFAB extends ImageButton {
...
}
然后是讀取一些自定義的屬性(假設你了解styleable的用法)
private void init(AttributeSet attrSet) {
Resources.Theme theme = ctx.getTheme();
TypedArray arr = theme.obtainStyledAttributes(attrSet, R.styleable.FAB, 0, 0);
try {
setBgColor(arr.getColor(R.styleable.FAB_bg_color, Color.BLUE));
setBgColorPressed(arr.getColor(R.styleable.FAB_bg_color_pressed, Color.GRAY));
StateListDrawable sld = new StateListDrawable();
sld.addState(new int[] {android.R.attr.state_pressed}, createButton(bgColorPressed));
sld.addState(new int[] {}, createButton(bgColor));
setBackground(sld);
}
catch(Throwable t) {}
finally {
arr.recycle();
}
}
在xml中我們需要加入如下代碼,一般是在attr.xml文件中。
?xml version="1.0" encoding="utf-8"?
resources
declare-styleable name="FAB"
!-- Background color --
attr name="bg_color" format="color|reference"/
attr name="bg_color_pressed" format="color|reference"/
/declare-styleable
/resources
使用StateListDrawable來實現(xiàn)不同狀態(tài)下的背景
private Drawable createButton(int color) {
OvalShape oShape = new OvalShape();
ShapeDrawable sd = new ShapeDrawable(oShape);
setWillNotDraw(false);
sd.getPaint().setColor(color);
OvalShape oShape1 = new OvalShape();
ShapeDrawable sd1 = new ShapeDrawable(oShape);
sd1.setShaderFactory(new ShapeDrawable.ShaderFactory() {
@Override
public Shader resize(int width, int height) {
LinearGradient lg = new LinearGradient(0,0,0, height,
new int[] {
Color.WHITE,
Color.GRAY,
Color.DKGRAY,
Color.BLACK
}, null, Shader.TileMode.REPEAT);
return lg;
}
});
LayerDrawable ld = new LayerDrawable(new Drawable[] { sd1, sd });
ld.setLayerInset(0, 5, 5, 0, 0);
ld.setLayerInset(1, 0, 0, 5, 5);
return ld;
}
最后將控件放xml中:
RelativeLayout xmlns:android=""
xmlns:tools=""
xmlns:custom=""
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MyActivity"
...
com.survivingwithandroid.fab.CustomFAB
android:layout_width="56dp"
android:layout_height="56dp"
android:src="@android:drawable/ic_input_add"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginRight="16dp"
android:layout_marginBottom="16dp"
custom:bg_color="@color/light_blue"
android:tint="@android:color/white"
/
/RelativeLayout
工具:photoshop
步驟:
1、打開photoshop,在PS里“新建”一張圖片背景,顏色可以透明、也可以選擇其他前景色、背景色等;
2、選擇按鈕形狀。
3、顏色自動設置為前景色,在“圖層——圖層樣式”里,有多種對按鈕圖層進行美化,如投影、顏色漸變,發(fā)光,這里為按鈕加:投影+顏色漸變。
4、按鈕圖就完成了。
在java代碼里加上button的setOnClick函數(shù),在里面加上button.setbackground(r.drawable.id),即在按鈕點擊時改變按鈕背景圖片。