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. Hadoop worldcount

    以前的公司和现在的公司,都用到了hadoop和hdfs.一直没入门,今天照着官网写了一个hadoop worldcount demo 1. hadoop是一个框架,什么是框架,spring是一个框架. ...

  2. NIO与Socket

    一.Socket 的使用 1.单线程Socket的使用 /** * 单线程版本 * 问题描述:只能服务单个客户端 * 解决方案:多线程版本 */ public class Socket_V1 { pu ...

  3. Mac PHPStorm快捷键总结

    全局搜索(command + shift + F) 显示类中的方法 (command + 7) 函数追踪 (command +鼠标点击) 单行注释/取消(command + /) 输入行号跳到某一行( ...

  4. Spring的自动装配Bean

    spring的自动装配功能的定义:无须在Spring配置文件中描述javaBean之间的依赖关系(如配置<property>.<constructor-arg>).IOC容器会 ...

  5. express中间件笔记整理

    expressexpress概念:express是基于nodejs的HTTPS模块构建出来的一个web应用开发框架,在nodejs之上扩展了 Web 应用所需的基本功能.本质上express应用就是调 ...

  6. PHP 中提示undefined index如何解决(多种方法)

    PHP 中提示undefined index如何解决(多种方法) 这篇文章主要介绍了PHP 中提示undefined index如何解决(多种方法)的相关资料,需要的朋友可以参考下 一.相关信息 平时 ...

  7. 纯C语言跑分(详细注释)

    #include <stdio.h> #include <time.h>//clock()所属头文件 ;//快排的数据规模 ,N=;//整点.浮点运算的规模 ;//计算圆周率的 ...

  8. 解释型vs编译型 动态vs静态 强类型vs弱类型

    ------------------------------------------------------------ 释型.动态语言与静态语言.强类型语言与弱类型语言的区别 编译型和解释型 我们先 ...

  9. linux系统服务器可能被攻击的几种攻击方式

    linux系统随着Linux企业应用的扩展,有大量的网络服务器使用Linux操作系统.Linux服务器的安全性能受到越来越多的关注,这里根据Linux服务器受到攻击的深度以级别形式列出,并提出不同的解 ...

  10. new era

    新的博客,将会记录我在工作和学习中遇到的问题以及总结...