android自定义环形对比图(外环有类似进度条的旋转动画)

http://blog.csdn.net/u012483116/article/details/50635268






1.首先在res/values里创建一个attr.xml的文件。

[html]  view plain  copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.       
  4.     <declare-styleable name="AnswerChartView">  
  5.         <attr name="radius" format="dimension"/>  
  6.         <attr name="strokeWidth" format="dimension"/>  
  7.         <attr name="circleColor" format="color"/>  
  8.         <attr name="innerringColor" format="color"/>  
  9.         <attr name="outringColor" format="color"/>  
  10.         <attr name="textSize" format="dimension"/>  
  11.     </declare-styleable>  
  12.       
  13. </resources>  


2.然后为自定义对比图View

[java]  view plain  copy
  1. package com.jsle.ebag.answer.view;  
  2.   
  3.   
  4. import com.jsle.ebag.answer.R;  
  5.   
  6.   
  7. import android.content.Context;  
  8. import android.content.res.TypedArray;  
  9. import android.graphics.Canvas;  
  10. import android.graphics.Paint;  
  11. import android.graphics.RectF;  
  12. import android.graphics.Paint.FontMetrics;  
  13. import android.util.AttributeSet;  
  14. import android.view.View;  
  15.   
  16.   
  17. /** 
  18.  * 弧线对比图 
  19.  * @param 
  20.  * @return 
  21.  * @author LH 
  22.  * @data 2016年1月25日 下午6:17:34 
  23.  **/  
  24. public class AnswerChartView extends View {  
  25.   
  26.   
  27.     // 圆画笔  
  28.     private Paint mCirclePaint;  
  29.     // 圆环画笔  
  30.     private Paint mRingPaint;  
  31.     // 百分数画笔  
  32.     private Paint mTextPaint;  
  33.     // 文本画笔  
  34.     private Paint mTextPaint2;  
  35.     // 里面圆颜色  
  36.     private int mCircleColor;  
  37.     // 里面弧颜色  
  38.     private int mInnerRingColor;  
  39.     // 外面弧颜色  
  40.     private int mOutRingColor;  
  41.     // 空白的圆半径  
  42.     private float mRadius;  
  43.     // 里面的弧半径  
  44.     private float mRingRadius;  
  45.     // 最外弧半径  
  46.     private float mRingRadius2;  
  47.     // 圆环的宽度  
  48.     private float mStrokeWidth;  
  49.     // 文本的中心x轴位置  
  50.     private int mXCenter;  
  51.     // 文本的中心y轴位置  
  52.     private int mYCenter;  
  53.     // 百分比文本的宽度  
  54.     private float mTxtWidth;  
  55.     // 描述文本的宽度  
  56.     private float mTxtWidth2;  
  57.     // 文本的高度  
  58.     private float mTxtHeight;  
  59.     // 百分数文本的大小  
  60.     private float mTxtSize;  
  61.     // 总成绩  
  62.     private int mTotalProgress = 100;  
  63.     // 个人的正确率  
  64.     private double mInnerProgress;  
  65.     // 班级的正确率  
  66.     private double mOutProgress;  
  67.     public AnswerChartView(Context context, AttributeSet attrs) {  
  68.         super(context, attrs);  
  69.         initAttrs(context, attrs);  
  70.         initVariable();  
  71.     }  
  72.   
  73.   
  74.     private void initAttrs(Context context, AttributeSet attrs) {  
  75.         TypedArray typeArray = context.getTheme().obtainStyledAttributes(attrs,  
  76.                 R.styleable.AnswerChartView, 00);  
  77.         mRadius = typeArray.getDimension(R.styleable.AnswerChartView_radius, 80);  
  78.         mTxtSize=typeArray.getDimension(R.styleable.AnswerChartView_textSize, 20);  
  79.         mStrokeWidth = typeArray.getDimension(R.styleable.AnswerChartView_strokeWidth, 10);  
  80.         mCircleColor = typeArray.getColor(R.styleable.AnswerChartView_circleColor, 0xFFFFFFFF);  
  81.         mOutRingColor = typeArray.getColor(R.styleable.AnswerChartView_innerringColor, 0xFFFFFFFF);  
  82.         mInnerRingColor = typeArray.getColor(R.styleable.AnswerChartView_outringColor, 0xFFFFFFFF);  
  83.         mRingRadius = mRadius + mStrokeWidth / 2;  
  84.         mRingRadius2 = mRadius + mStrokeWidth/2*3;  
  85.     }  
  86.   
  87.   
  88.     private void initVariable() {  
  89.         mCirclePaint = new Paint();  
  90.         mCirclePaint.setAntiAlias(true);  
  91.         mCirclePaint.setStyle(Paint.Style.FILL);  
  92.   
  93.   
  94.         mRingPaint = new Paint();  
  95.         mRingPaint.setAntiAlias(true);  
  96.         mRingPaint.setColor(mInnerRingColor);  
  97.         mRingPaint.setStyle(Paint.Style.STROKE);  
  98.         mRingPaint.setStrokeWidth(mStrokeWidth);  
  99.   
  100.   
  101.         mTextPaint = new Paint();  
  102.         mTextPaint.setAntiAlias(true);  
  103.         mTextPaint.setStyle(Paint.Style.FILL);  
  104.         mTextPaint.setARGB(25532207152);  
  105.         mTextPaint.setTextSize(mTxtSize);  
  106.           
  107.         mTextPaint2 = new Paint();  
  108.         mTextPaint2.setAntiAlias(true);  
  109.         mTextPaint2.setStyle(Paint.Style.FILL);  
  110.         mTextPaint2.setARGB(255000);  
  111.         mTextPaint2.setTextSize(20);  
  112.         FontMetrics fm = mTextPaint.getFontMetrics();  
  113.         mTxtHeight = (int) Math.ceil(fm.descent - fm.ascent);  
  114.   
  115.   
  116.     }  
  117.   
  118.   
  119.     @Override  
  120.     protected void onDraw(Canvas canvas) {  
  121.   
  122.   
  123.         mXCenter = getWidth() / 2;  
  124.         mYCenter = getHeight() / 2;  
  125.   
  126.   
  127.         mCirclePaint.setColor(getResources().getColor(R.color.gray));  
  128.         canvas.drawCircle(mXCenter,mYCenter, mRadius + mStrokeWidth*2, mCirclePaint);  
  129.           
  130.         RectF oval1 = new RectF();  
  131.         oval1.left = (mXCenter - mRingRadius);  
  132.         oval1.top = (mYCenter - mRingRadius);  
  133.         oval1.right = mRingRadius * 2 + (mXCenter - mRingRadius);  
  134.         oval1.bottom = mRingRadius * 2 + (mYCenter - mRingRadius);  
  135.         mRingPaint.setColor(mOutRingColor);  
  136.         canvas.drawArc(oval1, -90, ((float)mOutProgress / mTotalProgress) * 360false, mRingPaint);  
  137.           
  138.         mCirclePaint.setColor(mCircleColor);  
  139.         canvas.drawCircle(mXCenter, mYCenter, mRadius, mCirclePaint);  
  140.         if (mInnerProgress > 0 ) {  
  141.             RectF oval = new RectF();  
  142.             oval.left = (mXCenter - mRingRadius2);  
  143.             oval.top = (mYCenter - mRingRadius2);  
  144.             oval.right = mRingRadius2 * 2 + (mXCenter - mRingRadius2);  
  145.             oval.bottom = mRingRadius2 * 2 + (mYCenter - mRingRadius2);  
  146.             mRingPaint.setColor(mInnerRingColor);  
  147.             canvas.drawArc(oval, -90, ((float)mInnerProgress / mTotalProgress) * 360false, mRingPaint); //  
  148.             //          canvas.drawCircle(mXCenter, mYCenter, mRadius + mStrokeWidth / 2, mRingPaint);  
  149.             String txt = mInnerProgress + "%";  
  150.             String txt2 = "正确率";  
  151.             mTxtWidth = mTextPaint.measureText(txt, 0, txt.length());  
  152.             mTxtWidth2 = mTextPaint2.measureText(txt2, 0, txt2.length());  
  153.             canvas.drawText(txt, mXCenter - mTxtWidth / 2, mYCenter+mTxtWidth / 8, mTextPaint);  
  154.             canvas.drawText(txt2 ,mXCenter - mTxtWidth2 / 2, mYCenter + mTxtWidth / 2, mTextPaint2);  
  155.         }else if(mInnerProgress==0){  
  156.             String txt = mInnerProgress + "%";  
  157.             String txt2 = "正确率";  
  158.             mTxtWidth = mTextPaint.measureText(txt, 0, txt.length());  
  159.             mTxtWidth2 = mTextPaint2.measureText(txt2, 0, txt2.length());  
  160.             canvas.drawText(txt, mXCenter - mTxtWidth / 2, mYCenter+mTxtWidth / 8, mTextPaint);  
  161.             canvas.drawText(txt2 ,mXCenter - mTxtWidth2 / 2, mYCenter + mTxtWidth / 2, mTextPaint2);  
  162.         }  
  163.     }  
  164.     public void setOutProgress(double progress){  
  165.         mOutProgress=progress;  
  166.     }  
  167.     public void setInnerProgress(double progress) {  
  168.         mInnerProgress = progress;  
  169.         //      invalidate();  
  170.         postInvalidate();  
  171.     }  
  172.   
  173.   
  174. }  

3.使用自定义View

[html]  view plain  copy
  1. <com.jsle.ebag.answer.view.AnswerChartView  
  2.             android:id="@+id/tasks_view"  
  3.             android:layout_width="160dp"  
  4.             android:layout_height="160dp"  
  5.             android:layout_centerHorizontal="true"  
  6.             tc:circleColor="@color/circle_color"  
  7.             tc:innerringColor="@color/dark_yellow"  
  8.             tc:outringColor="@color/green"  
  9.             tc:radius="60dip"  
  10.             tc:strokeWidth="6dip"  
  11.             tc:textSize="32sp" />  

4.最后可已在AnswerChartActivity中设置内环和外环的百分比和属性

[java]  view plain  copy
  1. </pre><pre name="code" class="java">package com.jsle.ebag.answer.activity;  
  2.   
  3. import java.text.DecimalFormat;  
  4.   
  5. import com.jsle.ebag.answer.R;  
  6. import com.jsle.ebag.answer.R.layout;  
  7. import com.jsle.ebag.answer.view.AnswerChartView;  
  8.   
  9. import android.app.Activity;  
  10. import android.content.Intent;  
  11. import android.os.Bundle;  
  12. import android.view.Menu;  
  13. import android.view.MenuItem;  
  14. import android.view.View;  
  15. import android.view.View.OnClickListener;  
  16. import android.widget.Button;  
  17. import android.widget.LinearLayout;  
  18. import android.widget.TextView;  
  19.   
  20. public class AnswerChartActivity extends BaseActivity implements OnClickListener {  
  21.     private AnswerChartView mTasksView;  
  22.     private double mAccuracy;//个人的正确率  
  23.     private double cAccuracy;//班级的正确率  
  24.     private double mCurrentProgress;  
  25.     private LinearLayout btn_black;  
  26.     private TextView tv_title,tv_subjectcount,tv_submit,tv_accuracy;  
  27.     private String title;  
  28.     private double maccuracy,caccuracy;  
  29.     private int subjectcount,submit;  
  30.     @Override  
  31.     protected int getID() {  
  32.         // TODO Auto-generated method stub  
  33.         return R.id.Activity_ID_AnswerChart;  
  34.     }  
  35.     @Override  
  36.     protected String getTag() {  
  37.         // TODO Auto-generated method stub  
  38.         return "AnswerChart_Acitivity";  
  39.     }  
  40.     @Override  
  41.     protected void onCreate(Bundle savedInstanceState) {  
  42.         super.onCreate(savedInstanceState);  
  43.         setContentView(R.layout.activity_answer_chart);  
  44.         btn_black=(LinearLayout) findViewById(R.id.btn_black);  
  45.         tv_title=(TextView) findViewById(R.id.tv_title);  
  46.         tv_subjectcount=(TextView) findViewById(R.id.tv_subjectcount);  
  47.         tv_submit=(TextView) findViewById(R.id.tv_submit);  
  48.         tv_accuracy=(TextView) findViewById(R.id.tv_accuracy);  
  49.         btn_black.setOnClickListener(this);  
  50.         getData();  
  51.         initVariable();  
  52.         initView();  
  53.         new Thread(new ProgressRunable()).start();  
  54.     }  
  55.     private void getData() {  
  56.         // TODO Auto-generated method stub  
  57.         Intent intent = getIntent();  
  58.         title=intent.getStringExtra("title");  
  59.         maccuracy = intent.getDoubleExtra("maccuracy"0);  
  60.         caccuracy = intent.getDoubleExtra("caccuracy"0);  
  61.         subjectcount=intent.getIntExtra("subjectcount"0);  
  62.         submit=intent.getIntExtra("submit"0);  
  63.     }  
  64.     private void initVariable() {  
  65.         tv_title.setText(title);  
  66.         tv_subjectcount.setText("共"+subjectcount+"道题");  
  67.         tv_submit.setText(submit+"");  
  68.         tv_accuracy.setText(caccuracy+"%");  
  69.         mAccuracy =maccuracy;  
  70.         cAccuracy=caccuracy;  
  71.         mCurrentProgress = 0;  
  72.     }  
  73.     private void initView() {  
  74.         mTasksView = (AnswerChartView) findViewById(R.id.tasks_view);  
  75.         mTasksView.setOutProgress(cAccuracy);  
  76.     }  
  77.     /** 
  78.      *进度动画效果 
  79.      * @author LH 
  80.      * @data 2016年1月29日 下午3:43:31 
  81.      **/  
  82.     class ProgressRunable implements Runnable {  
  83.   
  84.         @Override  
  85.         public void run() {  
  86.             while (mCurrentProgress < mAccuracy) {  
  87.                 mCurrentProgress += 1;  
  88.                 if(mCurrentProgress>mAccuracy){  
  89.                     mCurrentProgress=mAccuracy;  
  90.                 }  
  91.                 mTasksView.setInnerProgress(mCurrentProgress);  
  92.                 try {  
  93.                     Thread.sleep(15);  
  94.                 } catch (Exception e) {  
  95.                     e.printStackTrace();  
  96.                 }  
  97.             }  
  98.         }  
  99.   
  100.     }  
  101.   
  102.     @Override  
  103.     public void onClick(View v) {  
  104.         // TODO Auto-generated method stub  
  105.         switch (v.getId()) {  
  106.         case R.id.btn_black:  
  107.             finish();  
  108.             break;  
  109.   
  110.         default:  
  111.             break;  
  112.         }  
  113.     }  
  114. }  



1
 
0
 
 



1.首先在res/values里创建一个attr.xml的文件。

[html]  view plain  copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <resources>  
  3.       
  4.     <declare-styleable name="AnswerChartView">  
  5.         <attr name="radius" format="dimension"/>  
  6.         <attr name="strokeWidth" format="dimension"/>  
  7.         <attr name="circleColor" format="color"/>  
  8.         <attr name="innerringColor" format="color"/>  
  9.         <attr name="outringColor" format="color"/>  
  10.         <attr name="textSize" format="dimension"/>  
  11.     </declare-styleable>  
  12.       
  13. </resources>  


2.然后为自定义对比图View

[java]  view plain  copy
  1. package com.jsle.ebag.answer.view;  
  2.   
  3.   
  4. import com.jsle.ebag.answer.R;  
  5.   
  6.   
  7. import android.content.Context;  
  8. import android.content.res.TypedArray;  
  9. import android.graphics.Canvas;  
  10. import android.graphics.Paint;  
  11. import android.graphics.RectF;  
  12. import android.graphics.Paint.FontMetrics;  
  13. import android.util.AttributeSet;  
  14. import android.view.View;  
  15.   
  16.   
  17. /** 
  18.  * 弧线对比图 
  19.  * @param 
  20.  * @return 
  21.  * @author LH 
  22.  * @data 2016年1月25日 下午6:17:34 
  23.  **/  
  24. public class AnswerChartView extends View {  
  25.   
  26.   
  27.     // 圆画笔  
  28.     private Paint mCirclePaint;  
  29.     // 圆环画笔  
  30.     private Paint mRingPaint;  
  31.     // 百分数画笔  
  32.     private Paint mTextPaint;  
  33.     // 文本画笔  
  34.     private Paint mTextPaint2;  
  35.     // 里面圆颜色  
  36.     private int mCircleColor;  
  37.     // 里面弧颜色  
  38.     private int mInnerRingColor;  
  39.     // 外面弧颜色  
  40.     private int mOutRingColor;  
  41.     // 空白的圆半径  
  42.     private float mRadius;  
  43.     // 里面的弧半径  
  44.     private float mRingRadius;  
  45.     // 最外弧半径  
  46.     private float mRingRadius2;  
  47.     // 圆环的宽度  
  48.     private float mStrokeWidth;  
  49.     // 文本的中心x轴位置  
  50.     private int mXCenter;  
  51.     // 文本的中心y轴位置  
  52.     private int mYCenter;  
  53.     // 百分比文本的宽度  
  54.     private float mTxtWidth;  
  55.     // 描述文本的宽度  
  56.     private float mTxtWidth2;  
  57.     // 文本的高度  
  58.     private float mTxtHeight;  
  59.     // 百分数文本的大小  
  60.     private float mTxtSize;  
  61.     // 总成绩  
  62.     private int mTotalProgress = 100;  
  63.     // 个人的正确率  
  64.     private double mInnerProgress;  
  65.     // 班级的正确率  
  66.     private double mOutProgress;  
  67.     public AnswerChartView(Context context, AttributeSet attrs) {  
  68.         super(context, attrs);  
  69.         initAttrs(context, attrs);  
  70.         initVariable();  
  71.     }  
  72.   
  73.   
  74.     private void initAttrs(Context context, AttributeSet attrs) {  
  75.         TypedArray typeArray = context.getTheme().obtainStyledAttributes(attrs,  
  76.                 R.styleable.AnswerChartView, 00);  
  77.         mRadius = typeArray.getDimension(R.styleable.AnswerChartView_radius, 80);  
  78.         mTxtSize=typeArray.getDimension(R.styleable.AnswerChartView_textSize, 20);  
  79.         mStrokeWidth = typeArray.getDimension(R.styleable.AnswerChartView_strokeWidth, 10);  
  80.         mCircleColor = typeArray.getColor(R.styleable.AnswerChartView_circleColor, 0xFFFFFFFF);  
  81.         mOutRingColor = typeArray.getColor(R.styleable.AnswerChartView_innerringColor, 0xFFFFFFFF);  
  82.         mInnerRingColor = typeArray.getColor(R.styleable.AnswerChartView_outringColor, 0xFFFFFFFF);  
  83.         mRingRadius = mRadius + mStrokeWidth / 2;  
  84.         mRingRadius2 = mRadius + mStrokeWidth/2*3;  
  85.     }  
  86.   
  87.   
  88.     private void initVariable() {  
  89.         mCirclePaint = new Paint();  
  90.         mCirclePaint.setAntiAlias(true);  
  91.         mCirclePaint.setStyle(Paint.Style.FILL);  
  92.   
  93.   
  94.         mRingPaint = new Paint();  
  95.         mRingPaint.setAntiAlias(true);  
  96.         mRingPaint.setColor(mInnerRingColor);  
  97.         mRingPaint.setStyle(Paint.Style.STROKE);  
  98.         mRingPaint.setStrokeWidth(mStrokeWidth);  
  99.   
  100.   
  101.         mTextPaint = new Paint();  
  102.         mTextPaint.setAntiAlias(true);  
  103.         mTextPaint.setStyle(Paint.Style.FILL);  
  104.         mTextPaint.setARGB(25532207152);  
  105.         mTextPaint.setTextSize(mTxtSize);  
  106.           
  107.         mTextPaint2 = new Paint();  
  108.         mTextPaint2.setAntiAlias(true);  
  109.         mTextPaint2.setStyle(Paint.Style.FILL);  
  110.         mTextPaint2.setARGB(255000);  
  111.         mTextPaint2.setTextSize(20);  
  112.         FontMetrics fm = mTextPaint.getFontMetrics();  
  113.         mTxtHeight = (int) Math.ceil(fm.descent - fm.ascent);  
  114.   
  115.   
  116.     }  
  117.   
  118.   
  119.     @Override  
  120.     protected void onDraw(Canvas canvas) {  
  121.   
  122.   
  123.         mXCenter = getWidth() / 2;  
  124.         mYCenter = getHeight() / 2;  
  125.   
  126.   
  127.         mCirclePaint.setColor(getResources().getColor(R.color.gray));  
  128.         canvas.drawCircle(mXCenter,mYCenter, mRadius + mStrokeWidth*2, mCirclePaint);  
  129.           
  130.         RectF oval1 = new RectF();  
  131.         oval1.left = (mXCenter - mRingRadius);  
  132.         oval1.top = (mYCenter - mRingRadius);  
  133.         oval1.right = mRingRadius * 2 + (mXCenter - mRingRadius);  
  134.         oval1.bottom = mRingRadius * 2 + (mYCenter - mRingRadius);  
  135.         mRingPaint.setColor(mOutRingColor);  
  136.         canvas.drawArc(oval1, -90, ((float)mOutProgress / mTotalProgress) * 360false, mRingPaint);  
  137.           
  138.         mCirclePaint.setColor(mCircleColor);  
  139.         canvas.drawCircle(mXCenter, mYCenter, mRadius, mCirclePaint);  
  140.         if (mInnerProgress > 0 ) {  
  141.             RectF oval = new RectF();  
  142.             oval.left = (mXCenter - mRingRadius2);  
  143.             oval.top = (mYCenter - mRingRadius2);  
  144.             oval.right = mRingRadius2 * 2 + (mXCenter - mRingRadius2);  
  145.             oval.bottom = mRingRadius2 * 2 + (mYCenter - mRingRadius2);  
  146.             mRingPaint.setColor(mInnerRingColor);  
  147.             canvas.drawArc(oval, -90, ((float)mInnerProgress / mTotalProgress) * 360false, mRingPaint); //  
  148.             //          canvas.drawCircle(mXCenter, mYCenter, mRadius + mStrokeWidth / 2, mRingPaint);  
  149.             String txt = mInnerProgress + "%";  
  150.             String txt2 = "正确率";  
  151.             mTxtWidth = mTextPaint.measureText(txt, 0, txt.length());  
  152.             mTxtWidth2 = mTextPaint2.measureText(txt2, 0, txt2.length());  
  153.             canvas.drawText(txt, mXCenter - mTxtWidth / 2, mYCenter+mTxtWidth / 8, mTextPaint);  
  154.             canvas.drawText(txt2 ,mXCenter - mTxtWidth2 / 2, mYCenter + mTxtWidth / 2, mTextPaint2);  
  155.         }else if(mInnerProgress==0){  
  156.             String txt = mInnerProgress + "%";  
  157.             String txt2 = "正确率";  
  158.             mTxtWidth = mTextPaint.measureText(txt, 0, txt.length());  
  159.             mTxtWidth2 = mTextPaint2.measureText(txt2, 0, txt2.length());  
  160.             canvas.drawText(txt, mXCenter - mTxtWidth / 2, mYCenter+mTxtWidth / 8, mTextPaint);  
  161.             canvas.drawText(txt2 ,mXCenter - mTxtWidth2 / 2, mYCenter + mTxtWidth / 2, mTextPaint2);  
  162.         }  
  163.     }  
  164.     public void setOutProgress(double progress){  
  165.         mOutProgress=progress;  
  166.     }  
  167.     public void setInnerProgress(double progress) {  
  168.         mInnerProgress = progress;  
  169.         //      invalidate();  
  170.         postInvalidate();  
  171.     }  
  172.   
  173.   
  174. }  

3.使用自定义View

[html]  view plain  copy
  1. <com.jsle.ebag.answer.view.AnswerChartView  
  2.             android:id="@+id/tasks_view"  
  3.             android:layout_width="160dp"  
  4.             android:layout_height="160dp"  
  5.             android:layout_centerHorizontal="true"  
  6.             tc:circleColor="@color/circle_color"  
  7.             tc:innerringColor="@color/dark_yellow"  
  8.             tc:outringColor="@color/green"  
  9.             tc:radius="60dip"  
  10.             tc:strokeWidth="6dip"  
  11.             tc:textSize="32sp" />  

4.最后可已在AnswerChartActivity中设置内环和外环的百分比和属性

[java]  view plain  copy
  1. </pre><pre name="code" class="java">package com.jsle.ebag.answer.activity;  
  2.   
  3. import java.text.DecimalFormat;  
  4.   
  5. import com.jsle.ebag.answer.R;  
  6. import com.jsle.ebag.answer.R.layout;  
  7. import com.jsle.ebag.answer.view.AnswerChartView;  
  8.   
  9. import android.app.Activity;  
  10. import android.content.Intent;  
  11. import android.os.Bundle;  
  12. import android.view.Menu;  
  13. import android.view.MenuItem;  
  14. import android.view.View;  
  15. import android.view.View.OnClickListener;  
  16. import android.widget.Button;  
  17. import android.widget.LinearLayout;  
  18. import android.widget.TextView;  
  19.   
  20. public class AnswerChartActivity extends BaseActivity implements OnClickListener {  
  21.     private AnswerChartView mTasksView;  
  22.     private double mAccuracy;//个人的正确率  
  23.     private double cAccuracy;//班级的正确率  
  24.     private double mCurrentProgress;  
  25.     private LinearLayout btn_black;  
  26.     private TextView tv_title,tv_subjectcount,tv_submit,tv_accuracy;  
  27.     private String title;  
  28.     private double maccuracy,caccuracy;  
  29.     private int subjectcount,submit;  
  30.     @Override  
  31.     protected int getID() {  
  32.         // TODO Auto-generated method stub  
  33.         return R.id.Activity_ID_AnswerChart;  
  34.     }  
  35.     @Override  
  36.     protected String getTag() {  
  37.         // TODO Auto-generated method stub  
  38.         return "AnswerChart_Acitivity";  
  39.     }  
  40.     @Override  
  41.     protected void onCreate(Bundle savedInstanceState) {  
  42.         super.onCreate(savedInstanceState);  
  43.         setContentView(R.layout.activity_answer_chart);  
  44.         btn_black=(LinearLayout) findViewById(R.id.btn_black);  
  45.         tv_title=(TextView) findViewById(R.id.tv_title);  
  46.         tv_subjectcount=(TextView) findViewById(R.id.tv_subjectcount);  
  47.         tv_submit=(TextView) findViewById(R.id.tv_submit);  
  48.         tv_accuracy=(TextView) findViewById(R.id.tv_accuracy);  
  49.         btn_black.setOnClickListener(this);  
  50.         getData();  
  51.         initVariable();  
  52.         initView();  
  53.         new Thread(new ProgressRunable()).start();  
  54.     }  
  55.     private void getData() {  
  56.         // TODO Auto-generated method stub  
  57.         Intent intent = getIntent();  
  58.         title=intent.getStringExtra("title");  
  59.         maccuracy = intent.getDoubleExtra("maccuracy"0);  
  60.         caccuracy = intent.getDoubleExtra("caccuracy"0);  
  61.         subjectcount=intent.getIntExtra("subjectcount"0);  
  62.         submit=intent.getIntExtra("submit"0);  
  63.     }  
  64.     private void initVariable() {  
  65.         tv_title.setText(title);  
  66.         tv_subjectcount.setText("共"+subjectcount+"道题");  
  67.         tv_submit.setText(submit+"");  
  68.         tv_accuracy.setText(caccuracy+"%");  
  69.         mAccuracy =maccuracy;  
  70.         cAccuracy=caccuracy;  
  71.         mCurrentProgress = 0;  
  72.     }  
  73.     private void initView() {  
  74.         mTasksView = (AnswerChartView) findViewById(R.id.tasks_view);  
  75.         mTasksView.setOutProgress(cAccuracy);  
  76.     }  
  77.     /** 
  78.      *进度动画效果 
  79.      * @author LH 
  80.      * @data 2016年1月29日 下午3:43:31 
  81.      **/  
  82.     class ProgressRunable implements Runnable {  
  83.   
  84.         @Override  
  85.         public void run() {  
  86.             while (mCurrentProgress < mAccuracy) {  
  87.                 mCurrentProgress += 1;  
  88.                 if(mCurrentProgress>mAccuracy){  
  89.                     mCurrentProgress=mAccuracy;  
  90.                 }  
  91.                 mTasksView.setInnerProgress(mCurrentProgress);  
  92.                 try {  
  93.                     Thread.sleep(15);  
  94.                 } catch (Exception e) {  
  95.                     e.printStackTrace();  
  96.                 }  
  97.             }  
  98.         }  
  99.   
  100.     }  
  101.   
  102.     @Override  
  103.     public void onClick(View v) {  
  104.         // TODO Auto-generated method stub  
  105.         switch (v.getId()) {  
  106.         case R.id.btn_black:  
  107.             finish();  
  108.             break;  
  109.   
  110.         default:  
  111.             break;  
  112.         }  
  113.     }  
  114. }  



1
 
0
 
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值