中文字幕第五页-中文字幕第页-中文字幕韩国-中文字幕最新-国产尤物二区三区在线观看-国产尤物福利视频一区二区

怎么在android中自定義環形對比圖效果

怎么在android中自定義環形對比圖效果?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

創新互聯公司專注于企業全網營銷推廣、網站重做改版、西吉網站定制設計、自適應品牌網站建設、HTML5建站商城建設、集團公司官網建設、外貿網站制作、高端網站制作、響應式網頁設計等建站業務,價格優惠性價比高,為西吉等各大城市提供網站開發制作服務。

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

<?xml version="1.0" encoding="utf-8"?>
<resources>
 
 <declare-styleable name="AnswerChartView">
  <attr name="radius" format="dimension"/>
  <attr name="strokeWidth" format="dimension"/>
  <attr name="circleColor" format="color"/>
  <attr name="innerringColor" format="color"/>
  <attr name="outringColor" format="color"/>
  <attr name="textSize" format="dimension"/>
 </declare-styleable>
 
</resources>

2.然后為自定義對比圖View

package com.jsle.ebag.answer.view;
 
 
import com.jsle.ebag.answer.R;
 
 
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;
import android.graphics.Paint.FontMetrics;
import android.util.AttributeSet;
import android.view.View;
 
 
/**
 * 弧線對比圖
 * @param
 * @return
 * @author LH
 * @data 2016年1月25日 下午6:17:34
 **/
public class AnswerChartView extends View {
 
 
 // 圓畫筆
 private Paint mCirclePaint;
 // 圓環畫筆
 private Paint mRingPaint;
 // 百分數畫筆
 private Paint mTextPaint;
 // 文本畫筆
 private Paint mTextPaint2;
 // 里面圓顏色
 private int mCircleColor;
 // 里面弧顏色
 private int mInnerRingColor;
 // 外面弧顏色
 private int mOutRingColor;
 // 空白的圓半徑
 private float mRadius;
 // 里面的弧半徑
 private float mRingRadius;
 // 最外弧半徑
 private float mRingRadius2;
 // 圓環的寬度
 private float mStrokeWidth;
 // 文本的中心x軸位置
 private int mXCenter;
 // 文本的中心y軸位置
 private int mYCenter;
 // 百分比文本的寬度
 private float mTxtWidth;
 // 描述文本的寬度
 private float mTxtWidth3;
 // 文本的高度
 private float mTxtHeight;
 // 百分數文本的大小
 private float mTxtSize;
 // 總成績
 private int mTotalProgress = 100;
 // 個人的正確率
 private double mInnerProgress;
 // 班級的正確率
 private double mOutProgress;
 public AnswerChartView(Context context, AttributeSet attrs) {
 super(context, attrs);
 initAttrs(context, attrs);
 initVariable();
 }
 
 
 private void initAttrs(Context context, AttributeSet attrs) {
 TypedArray typeArray = context.getTheme().obtainStyledAttributes(attrs,
 R.styleable.AnswerChartView, 0, 0);
 mRadius = typeArray.getDimension(R.styleable.AnswerChartView_radius, 80);
 mTxtSize=typeArray.getDimension(R.styleable.AnswerChartView_textSize, 20);
 mStrokeWidth = typeArray.getDimension(R.styleable.AnswerChartView_strokeWidth, 10);
 mCircleColor = typeArray.getColor(R.styleable.AnswerChartView_circleColor, 0xFFFFFFFF);
 mOutRingColor = typeArray.getColor(R.styleable.AnswerChartView_innerringColor, 0xFFFFFFFF);
 mInnerRingColor = typeArray.getColor(R.styleable.AnswerChartView_outringColor, 0xFFFFFFFF);
 mRingRadius = mRadius + mStrokeWidth / 2;
 mRingRadius2 = mRadius + mStrokeWidth/2*3;
 }
 
 
 private void initVariable() {
 mCirclePaint = new Paint();
 mCirclePaint.setAntiAlias(true);
 mCirclePaint.setStyle(Paint.Style.FILL);
 
 
 mRingPaint = new Paint();
 mRingPaint.setAntiAlias(true);
 mRingPaint.setColor(mInnerRingColor);
 mRingPaint.setStyle(Paint.Style.STROKE);
 mRingPaint.setStrokeWidth(mStrokeWidth);
 
 
 mTextPaint = new Paint();
 mTextPaint.setAntiAlias(true);
 mTextPaint.setStyle(Paint.Style.FILL);
 mTextPaint.setARGB(255, 32, 207, 152);
 mTextPaint.setTextSize(mTxtSize);
 
 mTextPaint2 = new Paint();
 mTextPaint2.setAntiAlias(true);
 mTextPaint2.setStyle(Paint.Style.FILL);
 mTextPaint2.setARGB(255, 0, 0, 0);
 mTextPaint2.setTextSize(20);
 FontMetrics fm = mTextPaint.getFontMetrics();
 mTxtHeight = (int) Math.ceil(fm.descent - fm.ascent);
 
 
 }
 
 
 @Override
 protected void onDraw(Canvas canvas) {
 
 
 mXCenter = getWidth() / 2;
 mYCenter = getHeight() / 2;
 
 
 mCirclePaint.setColor(getResources().getColor(R.color.gray));
 canvas.drawCircle(mXCenter,mYCenter, mRadius + mStrokeWidth*2, mCirclePaint);
 
 RectF oval1 = new RectF();
 oval1.left = (mXCenter - mRingRadius);
 oval1.top = (mYCenter - mRingRadius);
 oval1.right = mRingRadius * 2 + (mXCenter - mRingRadius);
 oval1.bottom = mRingRadius * 2 + (mYCenter - mRingRadius);
 mRingPaint.setColor(mOutRingColor);
 canvas.drawArc(oval1, -90, ((float)mOutProgress / mTotalProgress) * 360, false, mRingPaint);
 
 mCirclePaint.setColor(mCircleColor);
 canvas.drawCircle(mXCenter, mYCenter, mRadius, mCirclePaint);
 if (mInnerProgress > 0 ) {
 RectF oval = new RectF();
 oval.left = (mXCenter - mRingRadius2);
 oval.top = (mYCenter - mRingRadius2);
 oval.right = mRingRadius2 * 2 + (mXCenter - mRingRadius2);
 oval.bottom = mRingRadius2 * 2 + (mYCenter - mRingRadius2);
 mRingPaint.setColor(mInnerRingColor);
 canvas.drawArc(oval, -90, ((float)mInnerProgress / mTotalProgress) * 360, false, mRingPaint); //
 // canvas.drawCircle(mXCenter, mYCenter, mRadius + mStrokeWidth / 2, mRingPaint);
 String txt = mInnerProgress + "%";
 String txt2 = "正確率";
 mTxtWidth = mTextPaint.measureText(txt, 0, txt.length());
 mTxtWidth3 = mTextPaint2.measureText(txt2, 0, txt2.length());
 canvas.drawText(txt, mXCenter - mTxtWidth / 2, mYCenter+mTxtWidth / 8, mTextPaint);
 canvas.drawText(txt2 ,mXCenter - mTxtWidth3 / 2, mYCenter + mTxtWidth / 2, mTextPaint2);
 }else if(mInnerProgress==0){
 String txt = mInnerProgress + "%";
 String txt2 = "正確率";
 mTxtWidth = mTextPaint.measureText(txt, 0, txt.length());
 mTxtWidth3 = mTextPaint2.measureText(txt2, 0, txt2.length());
 canvas.drawText(txt, mXCenter - mTxtWidth / 2, mYCenter+mTxtWidth / 8, mTextPaint);
 canvas.drawText(txt2 ,mXCenter - mTxtWidth3 / 2, mYCenter + mTxtWidth / 2, mTextPaint2);
 }
 }
 public void setOutProgress(double progress){
 mOutProgress=progress;
 }
 public void setInnerProgress(double progress) {
 mInnerProgress = progress;
 // invalidate();
 postInvalidate();
 }
 
 
}

3.使用自定義View

<com.jsle.ebag.answer.view.AnswerChartView
   android:id="@+id/tasks_view"
   android:layout_width="160dp"
   android:layout_height="160dp"
   android:layout_centerHorizontal="true"
   tc:circleColor="@color/circle_color"
   tc:innerringColor="@color/dark_yellow"
   tc:outringColor="@color/green"
   tc:radius="60dip"
   tc:strokeWidth="6dip"
   tc:textSize="32sp" />

4.最后可已在AnswerChartActivity中設置內環和外環的百分比和屬性

package com.jsle.ebag.answer.activity;
 
import java.text.DecimalFormat;
 
import com.jsle.ebag.answer.R;
import com.jsle.ebag.answer.R.layout;
import com.jsle.ebag.answer.view.AnswerChartView;
 
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
 
public class AnswerChartActivity extends BaseActivity implements OnClickListener {
 private AnswerChartView mTasksView;
 private double mAccuracy;//個人的正確率
 private double cAccuracy;//班級的正確率
 private double mCurrentProgress;
 private LinearLayout btn_black;
 private TextView tv_title,tv_subjectcount,tv_submit,tv_accuracy;
 private String title;
 private double maccuracy,caccuracy;
 private int subjectcount,submit;
 @Override
 protected int getID() {
 // TODO Auto-generated method stub
 return R.id.Activity_ID_AnswerChart;
 }
 @Override
 protected String getTag() {
 // TODO Auto-generated method stub
 return "AnswerChart_Acitivity";
 }
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_answer_chart);
 btn_black=(LinearLayout) findViewById(R.id.btn_black);
 tv_title=(TextView) findViewById(R.id.tv_title);
 tv_subjectcount=(TextView) findViewById(R.id.tv_subjectcount);
 tv_submit=(TextView) findViewById(R.id.tv_submit);
 tv_accuracy=(TextView) findViewById(R.id.tv_accuracy);
 btn_black.setOnClickListener(this);
 getData();
 initVariable();
 initView();
 new Thread(new ProgressRunable()).start();
 }
 private void getData() {
 // TODO Auto-generated method stub
 Intent intent = getIntent();
 title=intent.getStringExtra("title");
 maccuracy = intent.getDoubleExtra("maccuracy", 0);
 caccuracy = intent.getDoubleExtra("caccuracy", 0);
 subjectcount=intent.getIntExtra("subjectcount", 0);
 submit=intent.getIntExtra("submit", 0);
 }
 private void initVariable() {
 tv_title.setText(title);
 tv_subjectcount.setText("共"+subjectcount+"道題");
 tv_submit.setText(submit+"");
 tv_accuracy.setText(caccuracy+"%");
 mAccuracy =maccuracy;
 cAccuracy=caccuracy;
 mCurrentProgress = 0;
 }
 private void initView() {
 mTasksView = (AnswerChartView) findViewById(R.id.tasks_view);
 mTasksView.setOutProgress(cAccuracy);
 }
 /**
 *進度動畫效果
 * @author LH
 * @data 2016年1月29日 下午3:43:31
 **/
 class ProgressRunable implements Runnable {
 
 @Override
 public void run() {
 while (mCurrentProgress < mAccuracy) {
 mCurrentProgress += 1;
 if(mCurrentProgress>mAccuracy){
  mCurrentProgress=mAccuracy;
 }
 mTasksView.setInnerProgress(mCurrentProgress);
 try {
  Thread.sleep(15);
 } catch (Exception e) {
  e.printStackTrace();
 }
 }
 }
 
 }
 
 @Override
 public void onClick(View v) {
 // TODO Auto-generated method stub
 switch (v.getId()) {
 case R.id.btn_black:
 finish();
 break;
 
 default:
 break;
 }
 }
}

關于怎么在android中自定義環形對比圖效果問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注創新互聯行業資訊頻道了解更多相關知識。

分享標題:怎么在android中自定義環形對比圖效果
本文來源:http://m.2m8n56k.cn/article6/gposig.html

成都網站建設公司_創新互聯,為您提供網站導航網頁設計公司小程序開發網站內鏈搜索引擎優化品牌網站制作

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:[email protected]。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都網站建設
主站蜘蛛池模板: 色偷偷在线刺激免费视频 | 性夜影院爽黄a爽免费看网站 | 黄网站免费在线 | free性欧美嫩交 | 久久久久久88色愉愉 | 99爱在线视频 | 久久精品综合免费观看 | 欧美片欧美日韩国产综合片 | 日本加勒比高清一本大道 | 在线视频免费观看a毛片 | 四虎免费大片aⅴ入口 | 99国产精品欧美久久久久久影院 | 国产一级毛片国产 | 日本69xxxxxxxxx69| 美女扒开腿让男生桶爽网站 | 国产欧美一区二区三区精品 | a毛片免费| 欧美精品国产一区二区三区 | 日本特黄乱人伦片 | 免费国产不卡午夜福在线观看 | 成人黄网18免费观看的网站 | 久久国产精品久久久久久 | 亚洲欧美在线播放 | 亚洲美女性生活视频 | 国产综合在线观看视频 | 日本成人免费在线视频 | 一区二区三区视频网站 | 欧美69视频在线 | 久久国产精品久久久久久 | 欧美性生交大片免费看 | 国产高清在线精品二区一 | 日韩欧美视频一区二区三区 | 欧美一级淫片免费播放口 | 99ri在线精品视频在线播放 | 农村三级孕妇视频在线 | 久久er视频 | 亚洲综合色一区二区三区小说 | 韩国免费毛片在线看 | jyzzjyzzjyzz日本在线观看 | 欧美一级特黄特色大片 | 一级全黄视频 |