diff --git a/app/src/main/java/com/shunzhi/parent/adapter/ReportAdapter.java b/app/src/main/java/com/shunzhi/parent/adapter/ReportAdapter.java new file mode 100644 index 0000000..fdd54b9 --- /dev/null +++ b/app/src/main/java/com/shunzhi/parent/adapter/ReportAdapter.java @@ -0,0 +1,52 @@ +package com.shunzhi.parent.adapter; + + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.share.mvpsdk.base.adapter.BaseRecyclerViewAdapter; +import com.share.mvpsdk.base.adapter.BaseRecyclerViewHolder; +import com.shunzhi.parent.R; +import com.shunzhi.parent.bean.ReportBean; +import com.shunzhi.parent.views.ProgressView; + +/** + * Created by Administrator on 2018/3/9 0009. + */ + +public class ReportAdapter extends BaseRecyclerViewAdapter { + + Context context; + + public ReportAdapter(Context context) { + this.context = context; + } + + + @Override + public BaseRecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = LayoutInflater.from(context).inflate(R.layout.item_report, null); + return new MyViewHolder(view); + } + + private class MyViewHolder extends BaseRecyclerViewHolder { + + ProgressView ringView; + + + public MyViewHolder(View view) { + super(view); + ringView = view.findViewById(R.id.ring); + } + + @Override + public void onBindViewHolder(ReportBean object, int position) { + ringView.setMaxCount(100.0f); + ringView.setCurrentCount(100); + ringView.setScore(100); + } + + } +} diff --git a/app/src/main/java/com/shunzhi/parent/bean/ReportBean.java b/app/src/main/java/com/shunzhi/parent/bean/ReportBean.java new file mode 100644 index 0000000..434d2ec --- /dev/null +++ b/app/src/main/java/com/shunzhi/parent/bean/ReportBean.java @@ -0,0 +1,8 @@ +package com.shunzhi.parent.bean; + +/** + * Created by Administrator on 2018/3/9 0009. + */ + +public class ReportBean { +} diff --git a/app/src/main/java/com/shunzhi/parent/ui/fragment/ReportFragment.java b/app/src/main/java/com/shunzhi/parent/ui/fragment/ReportFragment.java index e9beb34..4a162c7 100644 --- a/app/src/main/java/com/shunzhi/parent/ui/fragment/ReportFragment.java +++ b/app/src/main/java/com/shunzhi/parent/ui/fragment/ReportFragment.java @@ -1,23 +1,49 @@ package com.shunzhi.parent.ui.fragment; -import android.content.Context; -import android.net.Uri; import android.os.Bundle; -import android.support.v4.app.Fragment; -import android.view.LayoutInflater; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.v7.widget.LinearLayoutManager; +import android.support.v7.widget.RecyclerView; import android.view.View; -import android.view.ViewGroup; +import com.share.mvpsdk.base.BasePresenter; +import com.share.mvpsdk.base.fragment.BaseMVPCompatFragment; import com.shunzhi.parent.R; +import com.shunzhi.parent.adapter.ReportAdapter; +import com.shunzhi.parent.bean.ReportBean; -public class ReportFragment extends Fragment { +import java.util.ArrayList; +import java.util.List; + +public class ReportFragment extends BaseMVPCompatFragment { + RecyclerView recycler_report; + ReportAdapter reportAdapter; + Listlist=new ArrayList<>(); + + @NonNull + @Override + public BasePresenter initPresenter() { + return null; + } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - // Inflate the layout for this fragment - return inflater.inflate(R.layout.fragment_report, container, false); + public int getLayoutId() { + return R.layout.fragment_report; } + @Override + public void initUI(View view, @Nullable Bundle savedInstanceState) { + recycler_report = view.findViewById(R.id.recycle_report); + recycler_report.setLayoutManager(new LinearLayoutManager(getActivity())); + reportAdapter=new ReportAdapter(getActivity()); + ReportBean reportBean=new ReportBean(); + list.add(reportBean); + list.add(reportBean); + reportAdapter.addAll(list); + recycler_report.setAdapter(reportAdapter); + + + } } diff --git a/app/src/main/java/com/shunzhi/parent/views/ProgressView.java b/app/src/main/java/com/shunzhi/parent/views/ProgressView.java new file mode 100644 index 0000000..c66ccd5 --- /dev/null +++ b/app/src/main/java/com/shunzhi/parent/views/ProgressView.java @@ -0,0 +1,181 @@ +package com.shunzhi.parent.views; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Matrix; +import android.graphics.Paint; +import android.graphics.Paint.Cap; +import android.graphics.Paint.Style; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffXfermode; +import android.graphics.RectF; +import android.graphics.SweepGradient; +import android.util.AttributeSet; +import android.view.View; + +/*** + * 自定义圆弧进度条 + * + * @author liujing + */ +public class ProgressView extends View { + + //分段颜色 + private static final int[] SECTION_COLORS = {Color.RED, Color.YELLOW,Color.GREEN}; + private static final String[] ALARM_LEVEL = {"", "", "", ""}; + private float maxCount; + private float currentCount; + private int score; + private String crrentLevel; + private Paint mPaint; + private Paint mTextPaint; + private int mWidth, mHeight; + + public ProgressView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(context); + } + + public ProgressView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public ProgressView(Context context) { + this(context, null); + } + + private void init(Context context) { + mPaint = new Paint(); + mTextPaint = new Paint(); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + initPaint(); + RectF rectBlackBg = new RectF(20, 20, mWidth - 20, mHeight - 20); + canvas.drawArc(rectBlackBg, 0, 275, false, mPaint); + mPaint.setColor(getColor(score)); + canvas.drawText(score + "%", mWidth / 2, mHeight / 2, mTextPaint); + mTextPaint.setTextSize(40); + + SweepGradient sweepGradient = new SweepGradient(mWidth / 2, mWidth / 2, SECTION_COLORS, null); + Matrix matrix = new Matrix(); + matrix.setRotate(120, this.mWidth / 2, mWidth / 2); + sweepGradient.setLocalMatrix(matrix); + float section = currentCount / maxCount; + mPaint.setShader(sweepGradient); + + mPaint.setShader(sweepGradient); + mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP)); + mPaint.setStyle(Style.STROKE); + canvas.drawArc(rectBlackBg, 135, section * 275, false, mPaint); + } + + + private void initPaint() { + mPaint.setAntiAlias(true); + mPaint.setStrokeWidth((float) 40.0); + mPaint.setStyle(Style.STROKE); + mPaint.setStrokeCap(Cap.ROUND); + mPaint.setColor(Color.TRANSPARENT); + mTextPaint.setAntiAlias(true); + mTextPaint.setStrokeWidth((float) 3.0); + mTextPaint.setTextAlign(Paint.Align.CENTER); + mTextPaint.setTextSize(50); + mTextPaint.setColor(Color.BLACK); + + } + + private int dipToPx(int dip) { + float scale = getContext().getResources().getDisplayMetrics().density; + return (int) (dip * scale + 0.5f * (dip >= 0 ? 1 : -1)); + } + + public int getScore() { + return score; + } + + public String getCrrentLevel() { + return crrentLevel; + } + + public void setCrrentLevel(String crrentLevel) { + this.crrentLevel = crrentLevel; + } + + public float getMaxCount() { + return maxCount; + } + + public float getCurrentCount() { + return currentCount; + } + + public void setScore(int score) { + this.score = score; + if (score == 100) { + this.crrentLevel = ALARM_LEVEL[0]; + } else if (score >= 70 && score < 100) { + this.crrentLevel = ALARM_LEVEL[1]; + } else if (score >= 30 && score < 70) { + this.crrentLevel = ALARM_LEVEL[2]; + } else { + this.crrentLevel = ALARM_LEVEL[3]; + } + invalidate(); + } + public int getColor(int score) { + this.score = score; + if (score > 60 && score <= 100) { + return SECTION_COLORS[2]; + } else if (score >= 30 && score <= 60) { + return SECTION_COLORS[1]; + } else { + return SECTION_COLORS[0]; + } + + } + + /*** + * 设置最大的进度值 + * + * @param maxCount + */ + public void setMaxCount(float maxCount) { + this.maxCount = maxCount; + } + + /*** + * 设置当前的进度值 + * + * @param currentCount + */ + public void setCurrentCount(float currentCount) { + this.currentCount = currentCount > maxCount ? maxCount : currentCount; + invalidate(); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec); + int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec); + int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec); + int heightSpecSize = MeasureSpec.getSize(heightMeasureSpec); + if (widthSpecMode == MeasureSpec.EXACTLY + || widthSpecMode == MeasureSpec.AT_MOST) { + mWidth = widthSpecSize; + } else { + mWidth = 0; + } + if (heightSpecMode == MeasureSpec.AT_MOST + || heightSpecMode == MeasureSpec.UNSPECIFIED) { + mHeight = dipToPx(15); + } else { + mHeight = heightSpecSize; + } + setMeasuredDimension(mWidth, mHeight); + } + + } diff --git a/app/src/main/res/drawable/report_white.xml b/app/src/main/res/drawable/report_white.xml new file mode 100644 index 0000000..0f54385 --- /dev/null +++ b/app/src/main/res/drawable/report_white.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/rudiobtn_report_top.xml b/app/src/main/res/drawable/rudiobtn_report_top.xml new file mode 100644 index 0000000..8a9e975 --- /dev/null +++ b/app/src/main/res/drawable/rudiobtn_report_top.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_report.xml b/app/src/main/res/layout/fragment_report.xml index e1408fe..8d3f24f 100644 --- a/app/src/main/res/layout/fragment_report.xml +++ b/app/src/main/res/layout/fragment_report.xml @@ -49,8 +49,25 @@ android:drawableRight="@drawable/screen" /> + + + + + diff --git a/app/src/main/res/layout/item_report.xml b/app/src/main/res/layout/item_report.xml new file mode 100644 index 0000000..8c2a35f --- /dev/null +++ b/app/src/main/res/layout/item_report.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 583d122..6a78ac2 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -18,4 +18,5 @@ #1BE2E5 #ACD1FB #757575 + #5FB762 diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 7b92db3..54b1b4a 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -14,6 +14,7 @@ 34sp + 36sp 24sp 20sp 16sp -- libgit2 0.21.0