Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用画布绘制的错误对齐饼图_Android_Charts_Android Canvas - Fatal编程技术网

Android 使用画布绘制的错误对齐饼图

Android 使用画布绘制的错误对齐饼图,android,charts,android-canvas,Android,Charts,Android Canvas,我正在使用下面的代码生成一个饼图,但该图将退出屏幕视图。 有人能告诉我需要在哪里进行更改才能将其全部显示在屏幕上吗 package com.example.chartexample; import java.util.Random; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import a

我正在使用下面的代码生成一个饼图,但该图将退出屏幕视图。 有人能告诉我需要在哪里进行更改才能将其全部显示在屏幕上吗

package com.example.chartexample;

import java.util.Random;
import android.app.Activity;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;

public class MainActivity extends Activity {

float values[] = { 700, 400, 100, 500, 600 };

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    LinearLayout lv1 = (LinearLayout) findViewById(R.id.linear);

    values = calculateData(values);
    MyGraphview graphview = new MyGraphview(this, values);
    lv1.addView(graphview);
}

private float[] calculateData(float[] data) {
    float total = 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);
    }
    return data;
}

public class MyGraphview extends View {
    private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
    private float[] value_degree;
    RectF rectf = new RectF(120, 120, 380, 380);
    float temp = 0;

    public MyGraphview(Context context, float[] values) {
        super(context);
        value_degree = new float[values.length];
        for (int i = 0; i < values.length; i++) {
            value_degree[i] = values[i];
        }
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Random r;
        for (int i = 0; i < value_degree.length; i++) {
            if (i == 0) {
                r = new Random();
                int color = Color.argb(100, r.nextInt(256), r.nextInt(256),
                        r.nextInt(256));
                paint.setColor(color);
                canvas.drawArc(rectf, 0, value_degree[i], true, paint);
            } else {
                temp += value_degree[i - 1];
                r = new Random();
                int color = Color.argb(255, r.nextInt(256), r.nextInt(256),
                        r.nextInt(256));
                paint.setColor(color);
                canvas.drawArc(rectf, temp, value_degree[i], true, paint);
            }
        }
    }
}
}
下面是我的xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<LinearLayout
    android:id="@+id/linear"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="fill_parent" >
</LinearLayout>



</LinearLayout>
我现在得到的结果是


我需要它完全位于屏幕内部

我确信有一种方法可以让canvas.getWidth和canvas.getHeight使其居中,因为我认为矩形的位置不对。制作矩形时,它从左上角坐标开始。我现在面临的问题是。如何安装在屏幕内部??