代码如下:
package widgets;
import com.sensu.automall.R;
import com.sensu.automall.utils.MassageUtils;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.FontMetricsInt;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.GradientDrawable;
import android.util.AttributeSet;
import android.view.View;
public class SelectFPView extends View{
private Resources mResources;
private Paint mBitPaint;
private Paint mTextPaint;
private Bitmap mBitmap;
private GradientDrawable mDrawable;
public SelectFPView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
mResources = getResources();
initBitmap();
initPaint();
}
public SelectFPView(Context context) {
super(context);
mResources = getResources();
initBitmap();
initPaint();
}
private void initPaint() {
mBitPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mBitPaint.setFilterBitmap(true);
mBitPaint.setDither(true);
mBitPaint.setTextSize(MassageUtils.dip2px(14));
mTextPaint=new Paint(Paint.ANTI_ALIAS_FLAG);
mTextPaint.setFilterBitmap(true);
mTextPaint.setDither(true);
mTextPaint.setTextSize(MassageUtils.dip2px(14));
}
private void initBitmap() {
BitmapDrawable mBitmapDrawable = ((BitmapDrawable) (mResources.getDrawable(R.drawable.sift_select)));
mBitmap=mBitmapDrawable.getBitmap();
}
private boolean IsDrawBitmap;
public boolean isIsDrawBitmap() {
return IsDrawBitmap;
}
public void setIsDrawBitmap(boolean isDrawBitmap) {
IsDrawBitmap = isDrawBitmap;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if(!IsDrawBitmap){
setBackgroundDrawable(getResources().getDrawable(R.drawable.invoice_onselect));
mTextPaint.setTextAlign(Paint.Align.CENTER);
Paint.FontMetrics fontMetrics = mBitPaint.getFontMetrics();
float top = fontMetrics.top;//为基线到字体上边框的距离,
float bottom = fontMetrics.bottom;//为基线到字体下边框的距离,
int baseLineY = (int) (getHeight()/2 - top/2 - bottom/2);//基线中间点的y轴计算公式
canvas.drawText(text, getWidth()/2,baseLineY, mTextPaint);
}else{
setBackgroundDrawable(getResources().getDrawable(R.drawable.invoice_select));
mBitPaint.setTextAlign(Paint.Align.LEFT);
canvas.drawBitmap(mBitmap, MassageUtils.dip2px(10), this.getHeight()/2-mBitmap.getHeight()/2, mBitPaint);
mBitPaint.setColor(Color.RED);
FontMetricsInt fontMetrics = mBitPaint.getFontMetricsInt();
int baseline = (this.getHeight() - fontMetrics.bottom - fontMetrics.top) / 2;
canvas.drawText(text, MassageUtils.dip2px(15)+mBitmap.getWidth(),baseline, mBitPaint);
}
}
private String text="";
private int fontWidth;
private int fontHeight;
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// TODO Auto-generated method stub
Rect rect = new Rect();
mBitPaint.getTextBounds(text,0,text.length(), rect);
fontWidth = rect.width()+mBitmap.getWidth();
fontHeight=rect.height();
setMeasuredDimension(fontWidth+ MassageUtils.dip2px(25),
mBitmap.getHeight()+ MassageUtils.dip2px(20));
}
public void setText(String txt){
this.text=txt;
}
}
使用
selectFPView.setText(flowModel.getStr());
selectFPView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
for (int j = 0; j < views.size(); j++) {
((SelectFPView) views.get(j)).setIsDrawBitmap(false);
}
if(selectFPView.isIsDrawBitmap()){
selectFPView.setIsDrawBitmap(false);
}else{
if(itemtxtOnclick!=null){
itemtxtOnclick.txtOnClick(pos);
}
selectFPView.setIsDrawBitmap(true);
}
selectFPView.invalidate();
}
});