先上效果图
模拟学生试题结果的统计,但作用绝对不止用于此
上代码:
一个自定义圆形图标
参照https://www.jb51.net/article/81665.htm
public class CirclePro extends View {
private Paint paint;
private int circleBack;//圆的背景色
private int mschedual = 0;//用于控制动态变化
float circleHalf; //圆的半径
String percent = "";//绘制百分比的字符串
@SuppressLint("Recycle")
public CirclePro(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
paint = new Paint();
TypedArray array = context.getTheme().obtainStyledAttributes(attrs, R.styleable.myCircleImage, defStyleAttr,0);
@SuppressWarnings("unused")
int leng = array.length();
//获取自定义的属性,这里注意是R.styleable.myCircleImage_circlecolor而不是R.attr.circlecolor
circleBack = array.getColor(R.styleable.myCircleImage_circlecolor,Color.GREEN);
circleHalf = array.getDimension(R.styleable.myCircleImage_half,200.f);
System.out.println(circleBack);
}
/**
* 这个构造参数,当在布局文件中引用该view的时候,必须重写该构造函数
* @param context
* @param attrs
*/
public CirclePro(Context context, AttributeSet attrs) {
this(context, attrs, 0);//调用自己的构造函数
}
/**
* 根据文本的
* @param text
* @param textSize
* @return
*/
public float getTextWidth(String text,float textSize) {
TextPaint textPaint = new TextPaint();
textPaint.setTextSize(textSize);
return textPaint.measureText(text);
}
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
float height = getHeight();
float width = getWidth();
// float circleHalf = (float) (width*0.7/2);
paint.setColor(circleBack);
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.FILL);
canvas.drawCircle(width/2,height/2,circleHalf, paint);//画实心圆
if (mschedual <= 100) {//,如果当前进度小于100,画实心矩形
paint.setColor(Color.WHITE);
canvas.drawRect(width/2-circleHalf,height/2-circleHalf,width/2+circleHalf,height/2+circleHalf - mschedual*circleHalf/50, paint);
}
//画当前进度的字符串
paint.setColor(Color.BLACK);
paint.setTextSize(30.f);
percent = mschedual+" %";
canvas.drawText(percent, width/2-getTextWidth(percent,30)/2,height/2+paint.getTextSize()*3/8, paint);//字体的高度=paint.getTextSize()*3/4
//画空心圆
paint.setColor(circleBack);
paint.setStyle(Paint.Style.STROKE);
canvas.drawCircle(width/2,height/2,circleHalf, paint);
}
public void setMschedual(float f){
this.mschedual=Math.round(f);
invalidate();
}
}
public class CircleCardAdapter extends BaseAdapter {
private Context con;
private ArrayList<ViewQuestionAnswerCard.PositionSet> list;
private ArrayList<CountBigCircle> countBigCircleArrayList;
private LayoutInflater inflater;
private boolean isShowResult;
public CircleCardAdapter(Context context,
boolean isShowResult,
ArrayList<CountBigCircle> countBigCircleArrayList,
ArrayList<ViewQuestionAnswerCard.PositionSet> list){
this.con = context;
this.isShowResult=isShowResult;
this.countBigCircleArrayList=countBigCircleArrayList;
this.list = list;
inflater = (LayoutInflater)con.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
if(position>=getCount()){
return null;
}
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
viewHolder vh = null;
ViewQuestionAnswerCard.PositionSet positionSet = list.get(position);
if(convertView == null){
convertView = inflater.inflate(R.layout.item_small_circle_card, null);
vh = new viewHolder(convertView);
convertView.setTag(vh);
}else{
vh = (viewHolder) convertView.getTag();
}
String orderString="第"+positionSet.bigPos+"大题,第"+positionSet.smallPos+"小题";
vh.bigQuestionOrder=positionSet.bigPos;
vh.smallQuestionOrder=positionSet.smallPos;
vh.tvBigQuestionOrder.setText("第"+positionSet.bigPos+"大题");
vh.tvSmallQuestionOrder.setText("第"+positionSet.smallPos+"小题");
vh.circle.setMschedual(countBigCircleArrayList.get(positionSet.bigPos).getCountSmallCircleArrayList().get(positionSet.smallPos).getProgress());
return convertView;
}
public class viewHolder{
public CirclePro circle;
public TextView tvBigQuestionOrder;
public TextView tvSmallQuestionOrder;
public viewHolder(View view){
circle = (CirclePro) view.findViewById(R.id.circle);
tvBigQuestionOrder = (TextView) view.findViewById(R.id.tv_big_question_order);
tvSmallQuestionOrder = (TextView) view.findViewById(R.id.tv_small_question_order);
}
public int bigQuestionOrder;
public int smallQuestionOrder;
}
}
核心代码就这些,具体代码见 https://download.csdn.net/download/hugn215/10904453