您的位置:首页 > 移动开发 > Android开发

android仿IOS按钮点击效果,一张图片实现

2013-04-09 17:35 1051 查看
个人一直觉得ios按钮比较特别,只需要用一张图片就可以实现点击的效果。而且,最觉得无耐的是有的客户提供过来的PSD文件只做了一个按钮的样式,并没有诸如获取焦点、按下、放开的各种样式图片,所以就想尝试实现用一张图片实现点击的效果。今天,翻了一些资料,终于做了一个效果出来,原理只是改变当前按钮背景的亮度,可能有更好的办法实现,目前就这个先用着啦。

自己实现的一个Button类,代码:

package com.example.hellojni;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.Paint;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.StateListDrawable;
import android.util.AttributeSet;
import android.widget.Button;

public class MyButton extends Button {

private Context context;

public MyButton(Context context) {
super(context);
this.context = context;
initMyButton();
}

public MyButton(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
initMyButton();
}

public MyButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.context = context;
initMyButton();
}

private void initMyButton(){
setBackgroundDrawable(newSelector());
}

/**
* 传入改变亮度前的bitmap,返回改变亮度后的bitmap
* @param srcBitmap
* @return
*/
private Drawable changeBrightnessBitmap(Bitmap srcBitmap){
Bitmap bmp = Bitmap.createBitmap(srcBitmap.getWidth(), srcBitmap.getHeight(),
Config.ARGB_8888);
int brightness = 60 - 127;
ColorMatrix cMatrix = new ColorMatrix();
cMatrix.set(new float[] { 1, 0, 0, 0, brightness, 0, 1,
0, 0, brightness,// 改变亮度
0, 0, 1, 0, brightness, 0, 0, 0, 1, 0 });
Paint paint = new Paint();
paint.setColorFilter(new ColorMatrixColorFilter(cMatrix));
Canvas canvas = new Canvas(bmp);
// 在Canvas上绘制一个Bitmap
canvas.drawBitmap(srcBitmap, 0, 0, paint);
return new BitmapDrawable(bmp);
}
/** 设置Selector。 */
private StateListDrawable newSelector() {
StateListDrawable bg = new StateListDrawable();
Drawable normal =getBackground();
Drawable pressed =changeBrightnessBitmap(((BitmapDrawable) getBackground()).getBitmap());;
// View.PRESSED_ENABLED_STATE_SET
bg.addState(new int[] { android.R.attr.state_pressed, android.R.attr.state_enabled }, pressed);
// View.ENABLED_STATE_SET
bg.addState(new int[] { android.R.attr.state_enabled }, normal);
// View.EMPTY_STATE_SET
bg.addState(new int[] {}, normal);
return bg;
}
}

布局中:

<com.example.hellojni.MyButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/top_left_btn_bg" />
效果:



参考文章:
http://yq135314.iteye.com/blog/1333511 http://blog.csdn.net/qinjuning/article/details/7474827 http://www.linuxidc.com/Linux/2012-01/50979.htm http://www.linuxidc.com/Linux/2012-02/54979.htm
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: