类似京东筛选 点击小按钮打对勾,没有点击取消
2017-05-26 10:38
771 查看
代码如下:
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();
}
});
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();
}
});
相关文章推荐
- 在打印报表时,如何知道用户是真的打印了,还是点击了取消按钮而没有打印?
- android :点击某个按钮弹出在原有布局中没有(或者存在)内容 :以删除原有布局内容为例
- ios 短信分享没有标题和取消按钮问题
- jQuery实现按钮只点击一次后就取消点击事件绑定的方法
- iOS ShareSDK如果没有安装微信,QQ点击按钮没反应,上线有可能会被苹果拒绝.
- 按钮点击一个,其它都取消选中状态的iOS开发,
- 展开右上角的快捷菜单按钮后,点击屏幕其他区域按钮没有自动收起
- Ext4 Grid中点击按钮使用rowedit新建记录+取消删除新建的记录
- easyUI 弹框中点击取消按钮刷新父页面
- C#点击按钮后其他按钮排列类似导航菜单
- 关于JSP页面点击按钮没反应,方法没有执行的检查
- 点击按钮弹出 确定 取消 对话框
- Android下关于AlertDialog点击 确定或者取消按钮 对话框自动消失的 解决办法
- 实验类似微信注册下方的 【 点击上面的“注册按钮”,即表示你同意《XXX条约》】 的超链接
- 单选按钮radio点击已选中的,取消选中
- 如果ftp服务器使用windows下IIS创建,通过资源管理器登陆ftp服务器,输入正确的用户名和密码,点击登陆按钮没有反应
- dialog点击对话框之外的区域禁止取消,点击返回按钮取消对话框的同时关闭当前activity
- js页面弹出一个带有输入框的弹窗,并判断点击的是确定还是取消按钮
- jQuery实现按钮只点击一次后就取消点击事件绑定的方法
- iOS取消按钮点击时的动画效果