캔버스에서 파이 차트를 그리는 원형 차트 사용자 정의보기가 있습니다.사용자 정의보기를 부 풀리는 중 오류가 발생했습니다.
조각 안에있는 활동에서 파이 차트 값을 보내고 있습니다.
하지만
이내 활동이 적합한 솔루션을 찾을 수있는 모든 조치의 종류가 아니라 시도했다 파이 chart.I 팽창 오류를 얻고있다 ...
public class PieChart extends View {
float valuesForDrawing[];
float valuesForDisplay[];
// private float[] values,valuesForDisplay = new float[] {};
ArrayList<ViewWasTouchedListener> listeners = new ArrayList<ViewWasTouchedListener>();
public void setWasTouchedListener(ViewWasTouchedListener listener) {
listeners.add(listener);
}
private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
private float[] value_degree;
private float[] value_degree_for_display;
private float[] angle_list;
private int[] COLORS = { Color.BLUE, Color.GREEN, Color.MAGENTA,
Color.CYAN, Color.RED };
RectF rectf = new RectF(36, 48, 325, 330);
int temp = 0;
public PieChart(Context context, float[] values) {
super(context);
valuesForDrawing = calculateData(values);
value_degree = new float[valuesForDrawing.length];
for (int i = 0; i < values.length; i++) {
value_degree[i] = values[i];
}
valuesForDisplay = calculateDataForDisplay(values);
value_degree_for_display = new float[valuesForDisplay.length];
for (int i = 0; i < values.length; i++) {
value_degree_for_display[i] = values[i];
}
}
public PieChart(Context context, AttributeSet attrs, float[] values) {
super(context, attrs);
valuesForDrawing = calculateData(values);
value_degree = new float[valuesForDrawing.length];
for (int i = 0; i < values.length; i++) {
value_degree[i] = values[i];
}
valuesForDisplay = calculateDataForDisplay(values);
value_degree_for_display = new float[valuesForDisplay.length];
for (int i = 0; i < values.length; i++) {
value_degree_for_display[i] = values[i];
}
}
public PieChart(Context context, AttributeSet attrs, int defStyle,
float[] values) {
super(context, attrs, defStyle);
valuesForDrawing = calculateData(values);
value_degree = new float[valuesForDrawing.length];
for (int i = 0; i < values.length; i++) {
value_degree[i] = values[i];
}
valuesForDisplay = calculateDataForDisplay(values);
value_degree_for_display = new float[valuesForDisplay.length];
for (int i = 0; i < values.length; i++) {
value_degree_for_display[i] = values[i];
}
}
/*
* public void setChartData(float[] datapoints) { this.values =
* datapoints.clone(); this.valuesForDisplay = datapoints.clone();
* invalidate(); }
*/
@Override
protected void onDraw(Canvas canvas) {
// TODO Auto-generated method stub
super.onDraw(canvas);
for (int i = 0; i < value_degree.length; i++) {// values2.length; i++) {
if (i == 0) {
paint.setColor(COLORS[i]);
canvas.drawArc(rectf, 0, value_degree[i], true, paint);
} else {
temp += (int) value_degree[i - 1];
paint.setColor(COLORS[i]);
canvas.drawArc(rectf, temp, value_degree[i], true, paint);
}
}
for (ViewWasTouchedListener listener : listeners) {
listener.onViewDrawn(value_degree_for_display, COLORS);
}
}
private float[] calculateData(float[] data) {
// TODO Auto-generated method stub
float total = 0;
// float x=0;
for (int i = 0; i < data.length; i++) {
total += data[i];
}
for (int i = 0; i < data.length; i++) {
data[i] = 360 * (data[i]/total);
// x=x+data[i];
}
return data;
}
private float[] calculateDataForDisplay(float[] data) {
// TODO Auto-generated method stub
float total = 0;
float x = 0;
for (int i = 0; i < data.length; i++) {
total += data[i];
}
for (int i = 0; i < data.length; i++) {
data[i] = 360 * (data[i]/total);
x = x + data[i];
data[i] = x;
}
return data;
}
public float[] getValuesForDrawing() {
return valuesForDrawing;
}
public void setValuesForDrawing(float[] valuesForDrawing) {
this.valuesForDrawing = valuesForDrawing;
}
public float[] getValuesForDisplay() {
return valuesForDisplay;
}
public void setValuesForDisplay(float[] valuesForDisplay) {
this.valuesForDisplay = valuesForDisplay;
}
public ArrayList<ViewWasTouchedListener> getListeners() {
return listeners;
}
public void setListeners(ArrayList<ViewWasTouchedListener> listeners) {
this.listeners = listeners;
}
public Paint getPaint() {
return paint;
}
public void setPaint(Paint paint) {
this.paint = paint;
}
public float[] getValue_degree() {
return value_degree;
}
public void setValue_degree(float[] value_degree) {
this.value_degree = value_degree;
}
public float[] getValue_degree_for_display() {
return value_degree_for_display;
}
public void setValue_degree_for_display(float[] value_degree_for_display) {
this.value_degree_for_display = value_degree_for_display;
}
public float[] getAngle_list() {
return angle_list;
}
public void setAngle_list(float[] angle_list) {
this.angle_list = angle_list;
}
public int[] getCOLORS() {
return COLORS;
}
public void setCOLORS(int[] cOLORS) {
COLORS = cOLORS;
}
public RectF getRectf() {
return rectf;
}
public void setRectf(RectF rectf) {
this.rectf = rectf;
}
public int getTemp() {
return temp;
}
public void setTemp(int temp) {
this.temp = temp;
}
}
내가 전화하고 이 문장에서 볼 ..
PieChart customView = new PieChart(getActivity(), values);
값이 플로트 [] = {2,7,8,9, .. 아무것도};
하지만 오류를 얻고있다 ....
08-19 16:50:12.389: E/AndroidRuntime(27669): FATAL EXCEPTION: main
08-19 16:50:12.389: E/AndroidRuntime(27669): android.view.InflateException: Binary XML file line #17: Error inflating class com.example.fragmentnewone.PieChart
08-19 16:50:12.389: E/AndroidRuntime(27669): at android.view.LayoutInflater.createView(LayoutInflater.java:589)
08-19 16:50:12.389: E/AndroidRuntime(27669): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680)
08-19 16:50:12.389: E/AndroidRuntime(27669): at android.view.LayoutInflater.rInflate(LayoutInflater.java:739)
08-19 16:50:12.389: E/AndroidRuntime(27669): at android.view.LayoutInflater.rInflate(LayoutInflater.java:742)
08-19 16:50:12.389: E/AndroidRuntime(27669): at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
08-19 16:50:12.389: E/AndroidRuntime(27669): at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
08-19 16:50:12.389: E/AndroidRuntime(27669): at android.view.LayoutInflater.inflate(LayoutInflater.java:352)
08-19 16:50:12.389: E/AndroidRuntime(27669): at com.example.fragmentnewone.PieChartFragment.onCreateView(PieChartFragment.java:50)
08-19 16:50:12.389: E/AndroidRuntime(27669): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460)
08-19 16:50:12.389: E/AndroidRuntime(27669): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911)
08-19 16:50:12.389: E/AndroidRuntime(27669): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
08-19 16:50:12.389: E/AndroidRuntime(27669): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
08-19 16:50:12.389: E/AndroidRuntime(27669): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
08-19 16:50:12.389: E/AndroidRuntime(27669): at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:461)
08-19 16:50:12.389: E/AndroidRuntime(27669): at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
08-19 16:50:12.389: E/AndroidRuntime(27669): at android.support.v4.view.ViewPager.populate(ViewPager.java:1011)
08-19 16:50:12.389: E/AndroidRuntime(27669): at android.support.v4.view.ViewPager.populate(ViewPager.java:880)
08-19 16:50:12.389: E/AndroidRuntime(27669): at android.support.v4.view.ViewPager$3.run(ViewPager.java:238)
08-19 16:50:12.389: E/AndroidRuntime(27669): at android.os.Handler.handleCallback(Handler.java:608)
08-19 16:50:12.389: E/AndroidRuntime(27669): at android.os.Handler.dispatchMessage(Handler.java:92)
08-19 16:50:12.389: E/AndroidRuntime(27669): at android.os.Looper.loop(Looper.java:156)
08-19 16:50:12.389: E/AndroidRuntime(27669): at android.app.ActivityThread.main(ActivityThread.java:5109)
08-19 16:50:12.389: E/AndroidRuntime(27669): at java.lang.reflect.Method.invokeNative(Native Method)
08-19 16:50:12.389: E/AndroidRuntime(27669): at java.lang.reflect.Method.invoke(Method.java:511)
08-19 16:50:12.389: E/AndroidRuntime(27669): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:991)
08-19 16:50:12.389: E/AndroidRuntime(27669): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:758)
08-19 16:50:12.389: E/AndroidRuntime(27669): at dalvik.system.NativeStart.main(Native Method)
08-19 16:50:12.389: E/AndroidRuntime(27669): Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android.util.AttributeSet]
08-19 16:50:12.389: E/AndroidRuntime(27669): at java.lang.Class.getConstructorOrMethod(Class.java:460)
08-19 16:50:12.389: E/AndroidRuntime(27669): at java.lang.Class.getConstructor(Class.java:431)
08-19 16:50:12.389: E/AndroidRuntime(27669): at android.view.LayoutInflater.createView(LayoutInflater.java:561)
08-19 16:50:12.389: E/AndroidRuntime(27669): ... 26 more
편집 나는 나의 생성자를 변경하고 setter 메소드
public void setValues(float[] values) {
this.values = values;
}
를 사용하여 값을 설정하지만 오류
무엇입니까08-20 11:35:02.685: E/ViewGroup(14994): ----- NullPointerException -----
08-20 11:35:02.685: E/ViewGroup(14994): mChildrenCount = 1, count = 1, i = 0, child = [email protected], mEditChildren = false
08-20 11:35:02.685: E/ViewGroup(14994): idx = 0, child = [email protected]
08-20 11:35:02.685: E/ViewGroup(14994): ----- NullPointerException -----
08-20 11:35:02.685: E/ViewGroup(14994): mChildrenCount = 3, count = 3, i = 1, child = [email protected], mEditChildren = false
08-20 11:35:02.685: E/ViewGroup(14994): idx = 0, child = [email protected]
08-20 11:35:02.685: E/ViewGroup(14994): idx = 1, child = [email protected]
08-20 11:35:02.685: E/ViewGroup(14994): idx = 2, child = [email protected]
08-20 11:35:02.685: E/ViewGroup(14994): ----- NullPointerException -----
08-20 11:35:02.685: E/ViewGroup(14994): mChildrenCount = 1, count = 1, i = 0, child = [email protected], mEditChildren = false
08-20 11:35:02.685: E/ViewGroup(14994): idx = 0, child = [email protected]
My xml is
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@android:color/black">
<RelativeLayout
android:id="@+id/rel"
android:layout_width="250dp"
android:layout_height="250dp"
android:layout_marginTop="50dp"
android:layout_marginLeft="40dp"
android:orientation="vertical"
tools:context=".MainActivity"
android:background="#000000">
<com.example.fragmentnewone.PieChart
android:id="@+id/graphId"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.example.fragmentnewone.PieChart>
<ImageView
android:src="@drawable/graphic_ring"
android:id="@+id/imageView_ring"
android:scaleType="matrix"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
</ImageView>
<TextView
android:id="@+id/textId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="32dp"
android:textStyle="bold"
/>
</RelativeLayout>
</RelativeLayout>
그 방법을 자세히 설명해 주시겠습니까 – user1901079
수정 된 답변보기 – nhaarman
동일한 오류가 발생했지만 다음과 같은 오류가 발생했습니다. 내 퀘스트 편집 – user1901079