1.首先是范例代码,一个基本的ImageButton响应。

 package com.example.arlxsdemo;

 import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton; public class abc extends ActionBarActivity{
private ImageButton Btn_collect;//声明
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); Btn_collect=(ImageButton)findViewById(R.id.collect);//与布局文件的ImageButton绑定 Btn_collect.setOnClickListener(Btn_collectOnClick);//监听点击事件
Btn_collect.setOnTouchListener(Btn_collectOnTouch);//监听触摸事件 }
/**
* 点击响应
*/
private ImageButton.OnClickListener Btn_collectOnClick=new ImageButton.OnClickListener(){
public void onClick(View v){ }
};
/**
* 触摸响应
*/
private ImageButton.OnTouchListener Btn_collectOnTouch=new ImageButton.OnTouchListener(){
public boolean onTouch(View v,MotionEvent event){
if(event.getAction() == MotionEvent.ACTION_UP){ }
if(event.getAction() == MotionEvent.ACTION_DOWN){ }
return true;
}
};
}

基本响应范例

2.如果ImageButton如下图所示是不规则按钮,我们希望当点击到四个边角处的透明区域不响应时可以使用触摸事件监听。

修改如下。

 private ImageButton.OnTouchListener Btn_collectOnTouch=new ImageButton.OnTouchListener(){
public boolean onTouch(View v,MotionEvent event){
/**
* 判断点击区域是否为透明区域,如果是,则不进行响应
*/
Bitmap bitmap = ((BitmapDrawable)Btn_collect.getDrawable()).getBitmap();
if(bitmap.getPixel((int)(event.getX()),((int)event.getY()))==0)
return true; if(event.getAction() == MotionEvent.ACTION_UP){//抬起 }
if(event.getAction() == MotionEvent.ACTION_DOWN){//按下图片 }
return true;
}
};

不规则按钮忽略透明区域

3.更换ImageButton的图片。

Btn_collect.setImageDrawable(getResources().getDrawable(R.drawable.img2));  

4.src中动态改变控件的大小。由于动态转换安卓默认用的单位为px,而控件一般用的是dp,所以需要创建dp和px的转换类。

 public class NumberChange {
/**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素) ,dp=dip
*/
public static int diptopx(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
} /**
* 根据手机的分辨率从 px(像素) 的单位 转成为 dp
*/
public static int pxtodip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
}

然后来写控制控件大小的方法,注意这里的控件的父布局是什么就将RelativeLayout置换为相应的布局。

  public void SetControlSize(View v,int width,int height)
{
RelativeLayout.LayoutParams LayoutParams =(RelativeLayout.LayoutParams) v.getLayoutParams(); //取控件View当前的布局参数
LayoutParams.height =NumberChange.diptopx(context,height);// 控件的高强制设成xxxdp
LayoutParams.width = NumberChange.diptopx(context,width);// 控件的高强制设成xxxdp
v.setLayoutParams(LayoutParams); //使设置好的布局参数应用到控件
}

Android ImageButton的使用。的更多相关文章

  1. Android ImageButton Example 图片按钮

    Android ImageButton Example 图片按钮 使用“android.widget.ImageButton” 展现一个具有背景图片的按钮 本教程将展现一个具有名字为 c.png背景图 ...

  2. Android ImageButton图像灰色边框

    灰色边框,是imageButton空间自带的. 第一种解决方案: android:scaleType="fitXY"//这个代码是:拉伸图片(不按比例)以填充的长宽.所以图像最后最 ...

  3. android imageButton 点击按钮前中后,按钮颜色的变化

    我们在开发的过程中,往往为了美化界面的需要,会修改按钮的默认外观,而因为Android中的按钮有三种状态—默认,被点击,被选中.所以,如果要改变按钮的外观,需要对这三种情况都做出修改,也许在以往,我们 ...

  4. Android ImageButton | Button | TextView 点击和触摸效果

    ImageButton------------------------------------------------> 一.Java  代码: 在drawable目录下添加新的xml文件 bu ...

  5. android imageButton 透明图片

    在Android有许多不规则button.例如: 这个时候,我们假设想做成不规则button的话.第一步就是搞一张边缘透明的png图片,然后用src指定到他.这个时候我们会发现,还没有达到要的效果.还 ...

  6. Android ImageButton单击切换按钮图片效果

    正常状态的效果: 按钮按下的效果图片: 一.在java中为图片按钮增加触摸监听的函数来实现图片切换,代码如下: ImageButton btn = (ImageButton)findViewById( ...

  7. Android ImageButton android:scaleType

    ImageView的属性android:scaleType,即 ImageView.setScaleType(ImageView.ScaleType). android:scaleType是控制图片如 ...

  8. Android ImageButton的背景(图片)大小

    使用ImageButton的background属性,而不用src属性. 然后使用width和height进行调整.

  9. 收藏的技术文章链接(ubuntu,python,android等)

    我的收藏 他山之石,可以攻玉 转载请注明出处:https://ahangchen.gitbooks.io/windy-afternoon/content/ 开发过程中收藏在Chrome书签栏里的技术文 ...

随机推荐

  1. 无法启动此程序,因为计算机中丢失 MSVCP120.dll。尝试安装该程序以解决此问题

    重装了下系统(Windows 7),发现先前装的一些软件大部分不能正确启动,更为奇怪的是,即使我重装了该软件,打开的软件界面的时候,报如下错误:“无法启动此程序,因为计算机中丢失 MSVCP120.d ...

  2. Solr 6.6.0 ERROR: Port 8983 is already being used by another process.

    在目录D:\work\Solr\solr-6.6.0\bin下打开命令框: 输入:solr -e dih报错:ERROR: Port 8983 is already being used by ano ...

  3. win8.1使用WP8SDK出现Windows Phone Emulator无法启动的问题解决方案

    近期在win8.1专业版系统的vs2012上装了wp8SDK 体验一把wp开发的快感 安装sdk过程一切顺利 打完代码之后运行调试 问题来了: 提示如下错误 遂百度之 主要的方法就是两步 1.检查机器 ...

  4. python langid实现语种识别

    2017-04-26 语料数据入库时有个小需求,需要用一个字段存储语料的语种,偶然发现langid可以实现这一功能,再次感叹python的好用! #coding=utf-8 import langid ...

  5. (总结)Linux下的暴力密码在线破解工具Hydra详解

    (总结)Linux下的暴力密码在线破解工具Hydra详解 学习了:https://blog.csdn.net/yafeichang/article/details/53502869

  6. CodeForces 388A Fox and Box Accumulation (模拟)

    A. Fox and Box Accumulation time limit per test:1 second memory limit per test:256 megabytes Fox Cie ...

  7. 使用RAP搭建前端Mock Server

    转载自:<前后端分离--构建前端Mock Server--windows部署rap>http://www.cnblogs.com/dothin/p/5361883.html mock:模拟 ...

  8. Binder与interface

    在Interface中,asBinder函数涌来将服务类接口类型转换为IBinder类型: 相反的,asInterface函数用来将Ibinder类型转换为服务接口类型

  9. eclipse显示包的层次关系

    如何在eclipse中显示包的层次关系呢?如下图所示

  10. ubuntu 安装 gitlab最新版(下载慢问题)

    Debian/Ubuntu 用户 首先信任 GitLab 的 GPG 公钥: curl https://packages.gitlab.com/gpg.key 2> /dev/null | su ...