关于这个效果,网上大致三种说法,前两种一个是java代码一个是xml方法,但是针对一个button还好说,每个都要有效果就相当麻烦了,不是要准备好多图片就是要准备好多xml文件。。还是颜色过滤这个方法比较实用~网上说的很详细,但我还是废了一点时间才理解。。把这部分代码完整的粘出来以后备用。。不过ImageButton用这个方法没有添加上效果。。暂时不知道什么原因。。
PS:button和ImageButton都可以用自定义的图案,顺便把button的给粘出来。。。
按下效果:(button 和 ImageButton均可使用 但和xml中的类型要一致 否则强退。。。)
public class LoginActivity extends Activity {
private Button login;
private Button register;
/** 按钮被按下 */
private final static float[] BUTTON_PRESSED = new float[] {
2.0f, 0, 0, 0, -50,
0, 2.0f, 0, 0, -50,
0, 0, 2.0f, 0, -50,
0, 0, 0, 5, 0 };
/** 按钮恢复原状 */
private final static float[] BUTTON_RELEASED = new float[] {
1, 0, 0, 0, 0,
0, 1, 0, 0, 0,
0, 0, 1, 0, 0,
0, 0, 0, 1, 0 };
private static final OnTouchListener touchListener = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN) {
v.getBackground().setColorFilter(new ColorMatrixColorFilter(BUTTON_PRESSED));
v.setBackgroundDrawable(v.getBackground());
}else if(event.getAction() == MotionEvent.ACTION_UP) {
v.getBackground().setColorFilter(new ColorMatrixColorFilter(BUTTON_RELEASED));
v.setBackgroundDrawable(v.getBackground());
}
return false;
}
};
public static void setButtonStateChangeListener(View v) {
v.setOnTouchListener(touchListener);
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
login = (Button) findViewById(R.id.login);
register = (Button) findViewById(R.id.zhuce);
setButtonStateChangeListener(login);
setButtonStateChangeListener(register);
}
}
效果如下:
以上类型均为button,xml代码如下(设置background就行了~):
<Button
android:id="@+id/login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dip"
android:layout_weight="1"
android:background="@drawable/login_button" >
</Button>