zoukankan      html  css  js  c++  java
  • Android 自己定义 TextView drawableTop 图标与文字左对齐(效果图)

    public class DrawableTopLeftTextView extends TextView {
    
    	private Paint mPaint;
    	private float fFontHeight;
    	private Drawable[] drawables;
    	private int leftMargin = 40; //TODO 这个要通过代码获取,不能硬编码
    
    	public DrawableTopLeftTextView(Context context, AttributeSet attrs, int defStyle) {
    		super(context, attrs, defStyle);
    		init();
    	}
    
    	public DrawableTopLeftTextView(Context context, AttributeSet attrs) {
    		super(context, attrs);
    		init();
    	}
    
    	public DrawableTopLeftTextView(Context context) {
    		super(context);
    		init();
    	}
    
    	private void init() {
    		mPaint = getPaint();
    		//mPaint.setTextSize(56.0f);
    		mPaint.setColor(Color.parseColor("#cccccccc"));
    		FontMetrics fm = mPaint.getFontMetrics();
    		fFontHeight = (float) Math.ceil(fm.descent - fm.ascent);
    		drawables = getCompoundDrawables();
    	}
    
    	@Override
    	protected void onDraw(Canvas canvas) {
    		if (drawables != null) {
    			Drawable drawable = drawables[1]; // top
    			if (drawable != null) {
    				final float textY = getY() + drawable.getIntrinsicHeight() + fFontHeight - 5;
    				canvas.drawText(getText().toString(), 0, textY, mPaint);
    				canvas.clipRect(drawable.getBounds());
    				canvas.drawBitmap(getBitmap(drawable), getLeft()+leftMargin, getTop(), mPaint);
    				drawable.draw(canvas);
    				canvas.save();
    			}
    		}
    		super.onDraw(canvas);
    	}
    	
    	private final static Bitmap getBitmap(Drawable drawable){
    		BitmapDrawable bd = (BitmapDrawable) drawable;
    		return bd.getBitmap();
    	}
    }


    <com.bluetooth.light.widget.DrawableTopLeftTextView
                android:id="@+id/signal_text"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentRight="true"
                android:layout_marginRight="10dp"
                android:drawableTop="@drawable/signal_logo"
                android:text="@string/signal"
                android:textColor="#cccccccc"
                android:textSize="24sp" />


    效果图

  • 相关阅读:
    AngularJs轻松入门(三)MVC架构
    使用regasm注册.net com组件出现不是有效的.net程序集的解决办法
    AngularJs轻松入门(二)数据绑定
    基于服务的并行系统的通讯方式探讨
    日志文件支持unicode字符的做法
    一个软件构建系统的设想
    C/C++中printf和C++中cout的输出格式
    gch文件学习
    《C++ Primer》笔记-#include,#ifndef
    Linux makefile 教程 非常详细,且易懂
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5220264.html
Copyright © 2011-2022 走看看