博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android ImageButton
阅读量:6511 次
发布时间:2019-06-24

本文共 7535 字,大约阅读时间需要 25 分钟。

  hot3.png

public classImageButtonextends ImageViewjava.lang.Object   ↳	android.view.View 	   ↳	android.widget.ImageView 	 	   ↳	android.widget.ImageButton直接子类ZoomButton

ImageButton是上面带有图片的Button,与Button只是类似,按钮表面上的图像的定义是在xml文件中通过android:src或者是在java代码中通过imagebutton组件对象调用setImageResource(int a)方法来定义的。

在xml中实现:

在代码中实现:

//drawable下的图片 m_ImageButton.setImageDrawable(getResources().getDrawable(R.drawable.my_button)); //系统自带的图片  m_ImageButton.setImageDrawable(getResources().getDrawable(Android.R.drawable.sym_call_incoming));

ImageButton设置图片方式,有以下三种:

setImageBitmap(Bitmap bm) 
setImageDrawable(Drawable drawable) 
setImageResource(int resId)
设置透明背景可以通过设置background完成

android:background="#00000000"即可

半透明 

android:background="#7F000000"即可。

表示不同的按钮状态,你能够为每一个状态定义一个相对应的图片,一个很简单的方式就是通过xml绘制“selector

例如:

元素的顺序是很重要的,因为他们是按顺序执行的,这就是为什么normal按钮放在在最后了,因为在android:state_pressed and android:state_focused评估失效之后normal才被应用的。

state_enabled 是否有效

state_focused 是否聚焦
state_pressed 是否被按下
其中state_focused 和 state_pressed 可自由有如下4种组合

android:state_focused="true" android:state_pressed="true"android:state_focused="true" android:state_pressed="false"android:state_focused="false" android:state_pressed="true"android:state_focused="false" android:state_pressed="false"

方法:

protected boolean onSetAlpha (int alpha);//设置透明度,参数alpha的取值范围是0到255,如果视图可以得出制定的alphe就会返回一个true

imagebutton.setVisibility(View.GONE);//隐藏ImageButton1imagebutton.setVisibility(View.VISIBLE);//显示ImageButton2imagebutton.setImageResource(R.drawable.icon2);//设置内容

ImageButton按下和释放背景图片改变事件:

imageButton.setOnTouchListener(new OnTouchListener(){                             @Override                            public boolean onTouch(View v, MotionEvent event) {                                     if(event.getAction() == MotionEvent.ACTION_DOWN){                                             //更改为按下时的背景图片                                             v.setBackgroundResource(R.drawable.pressed);                                     }else if(event.getAction() == MotionEvent.ACTION_UP){                                             //改为抬起时的图片                                             v.setBackgroundResource(R.drawable.released);                                     }                                     return false;                             }                     });    imageButton.setOnTouchListener(new OnTouchListener(){                          @Override                          public boolean onTouch(View v, MotionEvent event) {                                  if(event.getAction() == MotionEvent.ACTION_DOWN){                                          //更改为按下时的背景图片                                          v.setBackgroundResource(R.drawable.pressed);                                  }else if(event.getAction() == MotionEvent.ACTION_UP){                                          //改为抬起时的图片                                          v.setBackgroundResource(R.drawable.released);                                  }                                  return false;                          }                   });

设置背景色:

m_ll.setBackgroundColor(Color.rgb(127,127,127)); m_ll.setBackgroundColor(Color.TRANSPARENT);

三:以上方式比较简单,但是需要很多的图片和布局文件,如果项目中的图片按钮比较多,那就很浪费资源。下面的方式使用矩阵颜色滤镜。

颜色过滤矩阵是一个4x5的矩阵, 四行分别是 红色通道值,绿色通道值,蓝色通道值和alpha通道值。五列分别是 对应通道的红色值,绿色值,蓝色值,alpha值和偏移量。

RGBAlpha的终值计算方法如下:

Red通道终值 = a[0] * srcR + a[1] * srcG + a[2] * srcB + a[3] * srcA + a[4]

Green通道终值 = a[5] * srcR + a[6] * srcG + a[7] * srcB + a[8] * srcA + a[9]

Blue通道终值 = a[10] * srcR + a[11] * srcG + a[12] * srcB + a[13] * srcA + a[14]

Alpha通道终值 = a[15] * srcR + a[16] * srcG + a[17] * srcB + a[18] * srcA + a[19]

备注:

srcR为原图Red通道值,srcG为原图Green通道值,srcB为原图Blue通道值,srcA为原图Alpha通道值。

每个通道的源值和终值都在0255的范围内。即使计算结果大于255或小于0,值都将被限制在0255的范围内。

实现代码如下:

采用Drawable的颜色过滤:

/**      * 按下这个按钮进行的颜色过滤      */      public final static float[] BT_SELECTED=new float[] {            2, 0, 0, 0, 2,            0, 2, 0, 0, 2,            0, 0, 2, 0, 2,            0, 0, 0, 1, 0 };              /**      * 按钮恢复原状的颜色过滤      */      public final static float[] BT_NOT_SELECTED=new float[] {            1, 0, 0, 0, 0,            0, 1, 0, 0, 0,            0, 0, 1, 0, 0,            0, 0, 0, 1, 0 };              /**      * 按钮焦点改变      */      public final static OnFocusChangeListener buttonOnFocusChangeListener=new OnFocusChangeListener() {              @Override      public void onFocusChange(View v, boolean hasFocus) {        if (hasFocus) {         v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_SELECTED));         v.setBackgroundDrawable(v.getBackground());        }        else       {         v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_NOT_SELECTED));          v.setBackgroundDrawable(v.getBackground());        }       }      };             /**      * 按钮触碰按下效果      */     public final static OnTouchListener buttonOnTouchListener=new OnTouchListener() {       @Override      public boolean onTouch(View v, MotionEvent event) {        if(event.getAction() == MotionEvent.ACTION_DOWN){         v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_SELECTED));         v.setBackgroundDrawable(v.getBackground());         }         else if(event.getAction() == MotionEvent.ACTION_UP){          v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_NOT_SELECTED));          v.setBackgroundDrawable(v.getBackground());         }        return false;       }      };            /**     * 设置图片按钮获取焦点改变状态     * @param inImageButton     */     public final static void setButtonFocusChanged(View inView)      {       inView.setOnTouchListener(buttonOnTouchListener);       inView.setOnFocusChangeListener(buttonOnFocusChangeListener);      }    /**    * 按下这个按钮进行的颜色过滤    */    public final static float[] BT_SELECTED=new float[] {         2, 0, 0, 0, 2,         0, 2, 0, 0, 2,         0, 0, 2, 0, 2,         0, 0, 0, 1, 0 };        /**    * 按钮恢复原状的颜色过滤    */    public final static float[] BT_NOT_SELECTED=new float[] {         1, 0, 0, 0, 0,         0, 1, 0, 0, 0,         0, 0, 1, 0, 0,         0, 0, 0, 1, 0 };        /**    * 按钮焦点改变    */    public final static OnFocusChangeListener buttonOnFocusChangeListener=new OnFocusChangeListener() {        @Override    public void onFocusChange(View v, boolean hasFocus) {     if (hasFocus) {      v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_SELECTED));      v.setBackgroundDrawable(v.getBackground());     }     else     {      v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_NOT_SELECTED));       v.setBackgroundDrawable(v.getBackground());     }    }   };       /**    * 按钮触碰按下效果    */   public final static OnTouchListener buttonOnTouchListener=new OnTouchListener() {    @Override    public boolean onTouch(View v, MotionEvent event) {     if(event.getAction() == MotionEvent.ACTION_DOWN){      v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_SELECTED));      v.setBackgroundDrawable(v.getBackground());      }      else if(event.getAction() == MotionEvent.ACTION_UP){       v.getBackground().setColorFilter(new ColorMatrixColorFilter(BT_NOT_SELECTED));       v.setBackgroundDrawable(v.getBackground());      }     return false;    }   };      /**   * 设置图片按钮获取焦点改变状态   * @param inImageButton   */   public final static void setButtonFocusChanged(View inView)   {    inView.setOnTouchListener(buttonOnTouchListener);    inView.setOnFocusChangeListener(buttonOnFocusChangeListener);   }

转载于:https://my.oschina.net/amigos/blog/59655

你可能感兴趣的文章
DNS解析偶尔延迟
查看>>
iOS打电话,发短信,发邮件,打开网址
查看>>
06-验证码-基本功能实现
查看>>
Java数据结构与算法(六) 希尔排序
查看>>
canvas学习笔记
查看>>
elasticsearch安装步骤
查看>>
PHP获取Cookie模拟登录CURL(转)
查看>>
PHP-权限控制类(转)
查看>>
CSS3秘笈第三版涵盖HTML5学习笔记9~12章
查看>>
bzoj1044木棍分割
查看>>
leetcode-136-Single Number
查看>>
微信小程序笔记<五> 页面管理及生命周期(route)——getCurrentPages()
查看>>
http服务器小项目
查看>>
一些数学上的名词及操作
查看>>
<%@ include %>指令和<jsp:include>区别
查看>>
因为文件组 'PRIMARY' 已满 解决办法
查看>>
Flume 读取实时更新的日志文件
查看>>
HDU 2049
查看>>
《Spring1之第十次站立会议》
查看>>
Unity Shader 噪声消融特效 - 剑灵死亡特效
查看>>