Skip to content

Commit

Permalink
1、修复addData添加多组数据,只有最后一组数据显示出来的BUG
Browse files Browse the repository at this point in the history
2、修复animeValue方法重复执行时会错误的丢失数据的BUG
  • Loading branch information
qstumn committed Jan 19, 2017
1 parent aa8475b commit 230917b
Show file tree
Hide file tree
Showing 9 changed files with 114 additions and 59 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,11 @@ protected void onCreate(Bundle savedInstanceState) {
List<Float> values = new ArrayList<>();
Collections.addAll(values, 3f, 6f, 2f, 7f, 5f, 1f, 4f, 3f, 8f, 5f);
RadarData data = new RadarData(values);
List<Float> values2 = new ArrayList<>();
Collections.addAll(values2, 7f, 1f, 4f, 2f, 8f, 3f, 9f, 6f, 5f, 3f);
RadarData data2 = new RadarData(values2);
mRadarView.addData(data);

mRadarView.addData(data2);
}

@Override
Expand Down
4 changes: 2 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ buildscript {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.3'
classpath 'com.novoda:bintray-release:0.3.4'
classpath 'com.android.tools.build:gradle:2.2.3'
classpath 'com.novoda:bintray-release:0.4.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
Expand Down
2 changes: 1 addition & 1 deletion radarviewlib/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ publish {
userOrg = 'qstumn'
groupId = 'q.rorbin'
artifactId = 'RadarView'
publishVersion = '1.0.0'
publishVersion = '1.0.1'
desc = 'this is a can rotate radar chart for android'
website = 'https://github.com/qstumn/RadarView'
}
Expand Down
45 changes: 0 additions & 45 deletions radarviewlib/src/main/java/rorbin/q/radarview/AnimeUtil.java

This file was deleted.

2 changes: 2 additions & 0 deletions radarviewlib/src/main/java/rorbin/q/radarview/RadarData.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import java.util.ArrayList;
import java.util.List;

import rorbin.q.radarview.util.RandomColor;

/**
* @author changhai qiu
* Email:qstumn@163.com
Expand Down
26 changes: 19 additions & 7 deletions radarviewlib/src/main/java/rorbin/q/radarview/RadarView.java
Original file line number Diff line number Diff line change
@@ -1,19 +1,16 @@
package rorbin.q.radarview;

import android.animation.ValueAnimator;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Point;
import android.graphics.PointF;
import android.support.annotation.IntRange;
import android.support.v4.view.GestureDetectorCompat;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
Expand All @@ -24,6 +21,9 @@
import java.util.Comparator;
import java.util.List;

import rorbin.q.radarview.util.AnimeUtil;
import rorbin.q.radarview.util.RotateUtil;

/**
* @author changhai qiu
* Email:qstumn@163.com
Expand Down Expand Up @@ -69,6 +69,8 @@ public class RadarView extends View {
private double mRotateOrientation;
private boolean mRotationEnable;

private AnimeUtil mAnimeUtil;

public RadarView(Context context) {
this(context, null);
}
Expand Down Expand Up @@ -100,6 +102,7 @@ private void initAttrs(AttributeSet attrs) {
}

private void init() {
mAnimeUtil = new AnimeUtil(this);
mScroller = new Scroller(mContext);
mDetector = new GestureDetectorCompat(mContext, new GestureListener());
mDetector.setIsLongpressEnabled(false);
Expand Down Expand Up @@ -258,17 +261,26 @@ public void setRotationEnable(boolean enable) {
}

public void animeValue(int duration) {
AnimeUtil.animeValue(this, AnimeUtil.AnimeType.ZOOM, duration);
for (RadarData radarData : mRadarData) {
animeValue(duration, radarData);
}
}

public void animeValue(int duration, RadarData data) {
if (!mAnimeUtil.isPlaying(data)) {
mAnimeUtil.animeValue(AnimeUtil.AnimeType.ZOOM, duration, data);
}
}

public void addData(RadarData data) {
mRadarData.add(data);
initData(data);
animeValue(2000);
animeValue(2000, data);
}

protected List<RadarData> getRadarData() {
return mRadarData;
public void removeRadarData(RadarData data) {
mRadarData.remove(data);
invalidate();
}

private void initData(RadarData data) {
Expand Down
83 changes: 83 additions & 0 deletions radarviewlib/src/main/java/rorbin/q/radarview/util/AnimeUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package rorbin.q.radarview.util;

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.ValueAnimator;
import android.support.v4.util.ArrayMap;

import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;

import rorbin.q.radarview.RadarData;
import rorbin.q.radarview.RadarView;

/**
* Created by chqiu on 2016/9/5.
*/
public class AnimeUtil {
private WeakReference<RadarView> mWeakRadarView;
private ArrayMap<RadarData, ValueAnimator> mAnimes;

public AnimeUtil(RadarView view) {
mWeakRadarView = new WeakReference<>(view);
mAnimes = new ArrayMap<>();
}

public void animeValue(AnimeType type, int duration, RadarData data) {
switch (type) {
case ZOOM:
startZoomAnime(duration, data);
break;
}
}

public boolean isPlaying() {
boolean isPlaying = false;
for (ValueAnimator anime : mAnimes.values()) {
isPlaying = anime.isStarted();
if (isPlaying) {
break;
}
}
return isPlaying;
}

public boolean isPlaying(RadarData data) {
ValueAnimator anime = mAnimes.get(data);
return anime != null && anime.isStarted();
}

private void startZoomAnime(final int duration, final RadarData data) {
final ValueAnimator anime = ValueAnimator.ofFloat(0, 1f);
final List<Float> values = data.getValue();
final List<Float> values2 = new ArrayList<>(values);
anime.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
RadarView view = mWeakRadarView.get();
if (view == null) {
anime.end();
} else {
float percent = Float.parseFloat(animation.getAnimatedValue().toString());
for (int i = 0; i < values.size(); i++) {
values.set(i, values2.get(i) * percent);
}
view.invalidate();
}
}
});
anime.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
mAnimes.remove(data);
}
});
anime.setDuration(duration).start();
mAnimes.put(data, anime);
}

public enum AnimeType {
ZOOM, ROTATE
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package rorbin.q.radarview;
package rorbin.q.radarview.util;

import java.util.ArrayList;
import java.util.HashMap;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package rorbin.q.radarview;
package rorbin.q.radarview.util;

import android.graphics.PointF;
import android.util.Log;
Expand All @@ -12,7 +12,7 @@
public class RotateUtil {
public static final double CIRCLE_ANGLE = 2 * Math.PI;

protected static double getRotateAngle(PointF p1, PointF p2, PointF mPointCenter) {
public static double getRotateAngle(PointF p1, PointF p2, PointF mPointCenter) {
int q1 = getQuadrant(p1, mPointCenter);
int q2 = getQuadrant(p2, mPointCenter);
double angle1 = getAngle(p1, mPointCenter);
Expand Down

0 comments on commit 230917b

Please sign in to comment.