Android 에서 MPAndroidChart 사용자 정의 로 최고점 표 지 를 그 리 는 방법
5612 단어 androidmpandroidchart사용자 정의
MPAndroidChart 는 안 드 로 이 드 기반 의 오픈 소스 도표 라 이브 러 리 로,MPAndroidChart 는 안 드 로 이 드 장치 에 각종 통계 도 표를 그 릴 수 있 을 뿐만 아니 라 도 표를 드래그 하고 크기 조정 할 수 있어 매우 유연 하 게 응용 된다.MPAndroidChart 는 더욱 가 볍 고 간단 하 며 자주 사용 하 는 도표 유형 을 가진다.선형 그림,떡 그림,기둥 모양 그림 과 산 점 그림 이다.
MPAndroidChart 사용자 정의 최고점 표시 그리 기
지난번 에 MPAndroidChart 에 관 한 글 을 발표 한 지 한 달 이 넘 었 습 니 다.프로젝트 에 하나의 수요 가 추가 되 어 간단 해 보 입 니 다.바로 가장 높 은 점 에서 사각형 상 자 를 그립 니 다.표지 의 가장 높 은 점 의 수 치 를 표시 하 는 동시에 가장 높 은 점 에서 작은 동 그 라 미 를 그립 니 다.그리고 평균 수치 선 을 그립 니 다.다음 그림 과 같 습 니 다.
간단 해 보 입 니 다.MPAndroidChart 의 demo 에 도 LineChart 는 작은 동그라미 와 디 스 플레이 수 치 를 가지 고 있 지만 가장 높 은 곳 에서 만 그 리 는 것 은 없 는 것 같 고 작은 중 공 코일 의 크기 를 조절 할 수 없 기 때문에 사용자 정의 로 그 릴 수 밖 에 없습니다.
LineChart 에서 렌 더 링 을 사용자 정의 하려 면 Render 를 사용자 정의 하고 LineChart Renderer 에 계승 한 다음 drawValues 방법 을 다시 써 야 합 니 다.
다음은 하나의 LineChart 의 기본 구성 을 말 해 보 자.모든 점 은 하나의 Entry 이 고 그 두 개의 매개 변 수 는 각각 X 축 과 Y 축의 값 이 며 X 축 은 반드시 정형 이 어야 하 며 Y 축 은 부동 점 형 이다.LineDataSet 은 여러 개의 점 으로 구성 되 어 있 기 때문에 그 매개 변 수 는 Array List
LineDataSet dataSet = (LineDataSet) mChart.getLineData().getDataSetByIndex(0);
List<Entry> entries = dataSet.getValues();
그리고 Array List
Transformer trans = mChart.getTransformer(dataSet.getAxisDependency());
MPPointD pointD = trans.getPixelForValues(max_x, max_y);
그 다음 에 이 위치 에 작은 동 그 라 미 를 그 릴 수 있 습 니 다.안 드 로 이 드 Canvas 자세 와 관련 된 글 이 인터넷 에 많 습 니 다.저 는 예전 에 C\#WinForm GDI+와 관련 된 프로젝트 를 한 적 이 있 습 니 다.그림 을 그 리 는 것 에 대해 조금 알 고 있 습 니 다.이해 하기 어렵 지 않 습 니 다.
Paint paintDrawPointFill = new Paint(Paint.ANTI_ALIAS_FLAG);
paintDrawPointFill.setStyle(Paint.Style.FILL);
paintDrawPointFill.setColor(Color.WHITE);
c.drawCircle((float) pointD.x, (float) pointD.y, ScreenUnit.dp2px(context, 6),paintDrawPointFill);
그 다음 에 최대 치 문자 와 옹 골 진 사각형 을 그립 니 다.제 생각 은 먼저 문 자 를 그립 니 다.문자 의 높이 와 너 비 를 측정 한 다음 에 너비 에 각각 좌우 에 거 리 를 더 한 다음 에 옹 골 진 사각형 을 그립 니 다.
String textTag=" ";
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setTextSize(ScreenUnit.dp2px(context, 12));
paint.setColor(igsLineConfig.getMainColor());
Rect rectTextBounds = new Rect();
paint.getTextBounds(textTag, 0, textTag.length(), rectTextBounds);
텍스트 의 너비 와 높이 가 져 오기:
int textWidth = (rectTextBounds.right - rectTextBounds.left);
int textHeight = (rectTextBounds.bottom - rectTextBounds.top);
그 다음 에 문자 와 사각형 의 상하 좌우 가 일정한 거 리 를 유지 할 수 있 도록 Padding 과 유사 하 게 두 개의 매개 변수 인 OffsetX 와 OffsetY 두 개의 매개 변 수 를 추가 한 다음 에 사각형 에 필요 한 좌표 시스템 을 다시 예화 합 니 다.
RectF rectF = new RectF((int) offset_x - textOffset,
(int) offset_y - textHeight - textOffset,
(int) offset_x + textWidth + textOffset,
(int) offset_y + textOffset);
사각형 그리 기:
c.drawRoundRect(rectF, igsLineConfig.getCorner(), igsLineConfig.getCorner(), paint);
또 하나의 LineChart 를 다시 실현 해 야 합 니 다.그 렌 더 링 은 우리 가 방금 LineChart Renderer 에 대한 실현 을 실현 하고 LineChart 를 계승 하 며 init 방법 을 다시 쓰 도록 지정 해 야 합 니 다.
@Override
protected void init() {
super.init();
WindowManager wm = (WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics metrics = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(metrics);
MyChartDataRender dataRender = new MyChartDataRender(this, mAnimator, mViewPortHandler, metrics.widthPixels, tag);
dataRender.context = getContext();
dataRender.igsLineConfig = IgsChartConfigSingleton.instance.getIgsAltitudeLineConfig();
mRenderer = dataRender;
}
Canvas 를 그 릴 때 제어 하거나 파 라 메 터 를 전달 하려 면 이 실현 에서 정의 할 수 있 습 니 다.예 를 들 어 제 가 수 동 으로 최대 치 를 지정 해 야 하 는 태그 표시 등 이 있 습 니 다.
private double maxValue;
public double getMaxValue() {
return maxValue;
}
public void setMaxValue(double maxValue) {
this.maxValue = maxValue;
}
만약 에 Render 의 실현 류 에 필요 하 다 면 도표 대상 을 얻 은 다음 에 우리 가 쓴 실현 류 로 강하 게 전환 할 수 있 습 니 다.
public void drawValues(Canvas c) {
super.drawValues(c);
MyLineChart chartInstance = (MyLineChart) mChart;
}
이로써 최고점 표 지 를 완성 하고 최고점 을 계산 하지 않 아 도 된다.이 LineChart 의 실현 을 개선 하고 배경 과 전망 을 사용자 정의 한 다음 에 Render 를 공유 합 니 다.말 이 많 지 않 습 니 다.위의 그림 입 니 다.평균 선 을 그 리 는 것 은 매우 간단 하 다.이미 내 장 된 것 이 실현 되 었 다.당신 이 해 야 할 일 은 모든 Y 축의 값 의 평균 값 을 계산 하 는 것 이다.또는 수 치 는 인터페이스 에서 유래 하면 직접 설정 하면 된다.
LimitLine avgLine = new LimitLine((float) navg);
avgLine.enableDashedLine(5.0f, 3.0f, 3.0f);
avgLine.setLineColor(Color.parseColor("#33CC33"));
lineChart1.getAxisLeft().addLimitLine(avgLine);
OK,MPAndroidChart 에 대한 이해 가 한 걸음 더 깊 어 졌 습 니 다!총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.