zoukankan      html  css  js  c++  java
  • 自定义组件---图片和文字实现ImageButton效果

    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

  • 相关阅读:
    命保住了!五年时间,我们也搞了一个技术中台(转)
    为什么要前后端分离?有什么优缺点?(转)
    Java WebService _CXF、Xfire、AXIS2、AXIS1_四种发布方式(优缺点对比)
    Java WebService _CXF、Xfire、AXIS2、AXIS1_四种发布方式(使用整理)
    Java WebService(实战) 简单实例
    Intellij IDEA svn的使用记录
    IDEA SonarLint安装及使用
    Java开发中的23种设计模式详解(收藏-转)
    Java中的static关键字解析
    触发器_实现ORACEL自动增长字段
  • 原文地址:https://www.cnblogs.com/lbangel/p/4335852.html
Copyright © 2011-2022 走看看