1、效果图

2、自定义代码:

<span style="font-family:Comic Sans MS;font-size:14px;">public class ImageTextView extends View implements OnClickListener {

	private Paint mImagePaint;
private Paint mTextPaint;
private int mTextSize=16;
private Bitmap imageBitmap;
private Context context;
private int viewHeight;
private DisplayMetrics displayMetrics;
private int imageTop;
private int textTop; public ImageTextView(Context context) {
super(context);
this.context = context;
init();
} public ImageTextView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
init();
} public ImageTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.context = context;
init();
}
/**
* 初始化数据
*/
private void init() {
displayMetrics = getDisplayMetrics();
mImagePaint = new Paint();
mTextPaint = new Paint();
mTextPaint.setColor(Color.BLACK);
mTextPaint.setTextSize(mTextSize*displayMetrics.density);
//
mTextPaint.setAntiAlias(true); // 打开抗矩齿
imageBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.home);
//设置背景颜色
setBackground(getResources().getDrawable(R.drawable.item_background_selector));
//设置点击事件
setOnClickListener(this);
} @Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
viewHeight = getHeight();
imageTop = (viewHeight - imageBitmap.getHeight())/2;
//是文字在垂直方向上居中
textTop = (int) ((viewHeight - getFontHeight(mTextPaint))/2-mTextPaint.getFontMetrics().top);
} @Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawBitmap(imageBitmap, 10, imageTop, mImagePaint);
canvas.drawText("打开",imageBitmap.getWidth()+20, textTop, mTextPaint);
} /**
* 获取手机分辨率
* @return
*/
public DisplayMetrics getDisplayMetrics() {
DisplayMetrics dm = new DisplayMetrics();
//取得DisplayMetrics对象方法一
dm = context.getApplicationContext().getResources().getDisplayMetrics();
//取得DisplayMetrics对象方法二
// ((Activity)cx).getWindowManager().getDefaultDisplay().getMetrics(dm);
return dm;
} /**
* 获取字体的高度
* @param paint
* @return
*/
private int getFontHeight(Paint paint){
FontMetrics fm = paint.getFontMetrics();
return (int)Math.ceil(fm.descent - fm.ascent);
} /**
* 改变字体颜色
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mTextPaint.setColor(Color.BLUE);
break;
case MotionEvent.ACTION_UP:
mTextPaint.setColor(Color.BLACK);
break;
default:
break;
}
invalidate();
return super.onTouchEvent(event);
} @Override
public void onClick(View v) { } }</span>

3、文字居中参考

http://blog.csdn.net/hursing/article/details/18703599

自定义组件---图片和文字实现ImageButton效果的更多相关文章

  1. 自定义带图片和文字的ImageTextButton

    今天我们来讲一下有关自定义控件的问题,今天讲的这篇是从布局自定义开始的,难度不大,一看就明白,估计有的同学或者开发者看了说,这种方式多此一举,但是小编我不这么认为,多一种解决方式,就多一种举一反三的学 ...

  2. 自定义带图片和文字的Button的排版--陈棚

    自定义button,动态加载图片与文字 [footView addSubview:btnAllChoose]; [btnAllChoose setTitle:str forState:UIContro ...

  3. Android 自定义Android带图片和文字的ImageButton

    经过分析,上述按钮效果实际上就是一个布局,一个最简单不过的垂直线性布局,上部分是一个ImageView,下部分是一个TextView,这个布局可点击.可设置监听. 我们首先要编写自己的ImageBut ...

  4. iOS 自定义UIButton(图片和文字混合)

    // UIApplicationDelegate  .h文件 #import <UIKit/UIKit.h> @interface AppDelegate : UIResponder &l ...

  5. Android自定义组件系列【8】——遮罩文字动画

    遮罩文字的动画我们在Flash中非常常见,作为Android的应用开发者你是否也想将这种动画做到你的应用中去呢?这一篇文章我们来看看如何自定义一个ImageView来实现让一张文字图片实现文字的遮罩闪 ...

  6. Android自定义View 画弧形,文字,并增加动画效果

    一个简单的Android自定义View的demo,画弧形,文字,开启一个多线程更新ui界面,在子线程更新ui是不允许的,但是View提供了方法,让我们来了解下吧. 1.封装一个抽象的View类   B ...

  7. UIButton图片文字控件位置自定义(图片居右文字居左、图片居中文字居中、图片居左文字消失等)

    在开发中经常会碰到需要对按钮中的图片文字位置做调整的需求.第一种方式是通过设置按钮中图片文字的偏移量.通过方法setTitleEdgeInsets和setImageEdgeInsets实现 代码如下: ...

  8. 【Wince-自定义控件】ImageButton 带图片、文字

    1.看图 可以实现MouseDown改变背景颜色或背景图片. 遗憾是没有实现键盘触发按钮事件. 2.选择继承自Control基类 public class ImageButton : Control ...

  9. android 自定义组件-带图片的textView

    1. 定义属性 <?xml version="1.0" encoding="utf-8"?> <resources> <decla ...

随机推荐

  1. Linux 目录结构说明

    根目录是整个系统最重要的一个目录,因为不但所有的目录都是由根目录衍生出来的,同时根目录也与开机/还原/系统修 复等动作有关. 由于系统开机时需要特定的开机软件.核心文件.开机所需程序.函数库等等文件数 ...

  2. Lucene原理之概念

    概念: 数据分两种: 1.结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等. 2.非结构化数据:指不定长或无固定格式的数据,如邮件,word文档等.(半结构化数据:如XML,HTML等, ...

  3. bash shell学习笔记(一)—— 常用命令

    一.基本的bash shell命令 1.默认bash shell 提示符是美元符号($); 2.bash手册 使用man命令来访问存储在Linux系统上的手册页面,如: bogon:~ Mac$ ma ...

  4. c# 圆上坐标点

    var x=-33204.0924438;  //圆心x var y=-9512.41208658; //圆心y var r=1000;//半径 var angle=30;//角度 var tmpX ...

  5. CSS3字体火焰燃烧效果

    动画的CSS: // fire @keyframes fireDiv { 0% { text-shadow: 0 0 4px white, 0 -5px 4px #ff3, 2px -10px 6px ...

  6. webstorm git 怎么断开版本控制 webstorm git for windows 禁止 自动运行

    也是无语啊,今天装了下最新版本的webstorm ,  发现特别卡,老动不动就卡死, 看了下进程, 牛X 啊,  git for windows 一直蹭蹭蹭的疯狂增长,一开始的一点到后来的庞然大物. ...

  7. numpy数组属性查看及断言

    numpy数组属性查看:类型.尺寸.形状.维度   import numpy as np a1 = np.array([1,2,3,4],dtype=np.complex128) print(a1) ...

  8. Hadoop、Hive、Spark 之间关系

    作者:Xiaoyu Ma ,大数据工程师 大数据本身是个很宽泛的概念,Hadoop生态圈(或者泛生态圈)基本上都是为了处理超过单机尺度的数据处理而诞生的.你可以把它比作一个厨房所以需要的各种工具.锅碗 ...

  9. Java 之集合框架 上(9)

    Java 中的集合框架 如果一个类中存在很多相同类型的属性. 例如:学生类 学生可以选课,因此存在很多课程类型的属性.但是每个学生选择的课程的种类和数量是不一样的. 如果将每一个课程类型的属性都列到课 ...

  10. 新建虚拟机,每次都提示无法连接虚拟设备 ide1:0

    处理方式:看到了这个老哥http://www.cnblogs.com/dean-du/p/6888513.html的博客,发现问题是一样的,所以记录一下. 将虚拟机设置中的CD/DVD选项中的连接更改 ...