android自定义按钮示例(重写imagebutton控件实现图片按钮)

 更新时间:2014年03月16日 09:17:37   作者:  
由于项目这种类型的图片按钮比较多,所以重写了ImageButton类,现在把代码分享给大家,需要的朋友可以参考下

由于项目这种类型的图片按钮比较多,所以重写了ImageButton类。

复制代码 代码如下:

package me.henji.widget;

import android.content.Context;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.view.View.OnTouchListener;
import android.widget.ImageButton;

/**
 * 自定义图片按钮(ImageButton),按下颜色改变
 * @author Leo
 * @created 2013-3-15
 */
public class CmButton extends ImageButton implements OnTouchListener, OnFocusChangeListener {

 public CmButton(Context context) {
  super(context);
  this.setOnTouchListener(this);
  this.setOnFocusChangeListener(this);
 }

 public CmButton(Context context, AttributeSet attrs) {
  this(context, attrs, android.R.attr.imageButtonStyle);
  this.setOnTouchListener(this);
  this.setOnFocusChangeListener(this);
 }

 public CmButton(Context context, AttributeSet attrs, int defStyle) {
  super(context, attrs, defStyle);
  setFocusable(true);
  this.setOnTouchListener(this);
  this.setOnFocusChangeListener(this);
 }

 @Override
 public void onFocusChange(View v, boolean hasFocus) {
  // 灰色效果
  ColorMatrix cm = new ColorMatrix();
  cm.setSaturation(0);
  if (hasFocus) {
   ((ImageButton) v).getDrawable().setColorFilter(new ColorMatrixColorFilter(cm));
  } else {
   ((ImageButton) v).getDrawable().clearColorFilter();
  }
 }

 @Override
 public boolean onTouch(View v, MotionEvent event) {
  // 灰色效果
  ColorMatrix cm = new ColorMatrix();
  cm.setSaturation(0);
  if (event.getAction() == MotionEvent.ACTION_DOWN) {
   ((ImageButton) v).getDrawable().setColorFilter(new ColorMatrixColorFilter(cm));
  } else if (event.getAction() == MotionEvent.ACTION_UP) {
   ((ImageButton) v).getDrawable().clearColorFilter();
  }
  return false;
 }
}

布局文件

复制代码 代码如下:

<me.henji.widget.CmButton
    android:id="@+id/btn_login"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#00000000"
    android:src="@drawable/button_login"
    android:text="@string/login_login" />

相关文章

  • Android巧用ViewPager实现左右循环滑动图片

    Android巧用ViewPager实现左右循环滑动图片

    这篇文章主要为大家详细介绍了Android巧用ViewPager实现左右循环滑动图片的相关资料,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • Android中使用ListView实现漂亮的表格效果

    Android中使用ListView实现漂亮的表格效果

    这篇文章主要介绍了Android中使用ListView实现漂亮的表格效果,本文用详细的代码实例创建了一个股票行情表格,需要的朋友可以参考下
    2014-10-10
  • Android开发之自定义CheckBox

    Android开发之自定义CheckBox

    本文通过实例代码演示如何在Android中如何自定义CheckBox,实现的效果很好,有需要的可以参考借鉴。
    2016-08-08
  • Android之FanLayout制作圆弧滑动效果

    Android之FanLayout制作圆弧滑动效果

    这篇文章主要介绍了Android之FanLayout制作圆弧滑动效果,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • Android实现志愿者系统详细步骤与代码

    Android实现志愿者系统详细步骤与代码

    这篇文章主要介绍了Android实现志愿者系统,本系统采用MVC架构设计,SQLite数据表有用户表、成员表和活动表,有十多个Activity页面。打开应用,进入欢迎界面,3s后跳转登录界面,用户先注册账号,登录成功后进入主界面
    2023-02-02
  • android实用工具类分享(获取内存/检查网络/屏幕高度/手机分辨率)

    android实用工具类分享(获取内存/检查网络/屏幕高度/手机分辨率)

    这篇文章主要介绍了android实用工具类,包括获取内存、检查网络、屏幕高度、手机分辨率、获取版本号等功能,需要的朋友可以参考下
    2014-03-03
  • 浅谈Android ANR的信息收集过程

    浅谈Android ANR的信息收集过程

    ANR全称即Application Not Responding,也就是应用程序无响应。这篇文章主要介绍了Android ANR的信息收集过程,感兴趣的同学可以了解一下
    2021-11-11
  • Flutter开发中的路由参数处理

    Flutter开发中的路由参数处理

    在实际开发中,我们经常会需要在页面跳转的时候携带路由参数,典型的例子就是从列表到详情页的时候,需要携带详情的 id,以便详情页获取对应的数据。同时,有些时候还需要返回时携带参数返回上一级,以便上级页面根据返回结果更新。本篇将介绍这两种情形的实现。
    2021-06-06
  • Android Flutter实现评分组件的示例代码

    Android Flutter实现评分组件的示例代码

    在很多应用中,我们都需要收集用户的评分,比如商品满意度、配送满意度、应用使用体验等等。本文就利用flutter_rating_bar实现简易的评分组件,感兴趣的可以
    2022-11-11
  • Kotlin WorkManager使用方法详解

    Kotlin WorkManager使用方法详解

    这篇文章主要介绍了Kotlin WorkManager使用方法,WorkManager是 安卓体系结构之一,也是Android JetPack的一部分。WorkManager用于可延期并需要保证执行的后台工作
    2023-01-01

最新评论