无法在Android中增加addView [英] Could not add addView in android

查看:225
本文介绍了无法在Android中增加addView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要帮助的朋友。

下面是我的活动

public class MainActivity extends Activity {

    float values[] = { 700, 400, 100, 500, 600 };
    float values1[] = { 70, 40, 10, 50 };

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

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

        values = calculateData(values);
        values1 = calculateData(values1);
        MyGraphview graphview = new MyGraphview(this, values);
        graphview.setLayoutParams(new LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        lv1.addView(graphview, 0);
        MyGraphview1 graphview1 = new MyGraphview1(this, values1);
        graphview1.setLayoutParams(new LinearLayout.LayoutParams(
                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        lv1.addView(graphview1, 0);

    }

    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(150, 150, 350, 350);

        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);
                }
            }
        }
    }

    public class MyGraphview1 extends View {
        private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
        private float[] value_degree;
        RectF rectf = new RectF(170, 370, 330, 530);

        float temp = 0;

        public MyGraphview1(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

And this is my xml

<RelativeLayout 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" >

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

</RelativeLayout>

这是我的结果。

但是,预期的结果是

什么是错误的,我code的朋友。请帮帮我。先谢谢了。

What is wrong in my code friends. please help me. Thanks in advance.

如果我删除PARAMS所以这将是

if I remove the params so it would be

addView(视图);
并删除索引

addView(view); and remove Index

        MyGraphview graphview = new MyGraphview(this, values);
//      graphview.setLayoutParams(new LinearLayout.LayoutParams(
//              LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        lv1.addView(graphview);
        MyGraphview1 graphview1 = new MyGraphview1(this, values1);
//      graphview1.setLayoutParams(new LinearLayout.LayoutParams(
//              LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        lv1.addView(graphview1);

然后我的输出是:

Then my output is:

推荐答案

感谢很多谁所有试图解决我的问题啦。我已经找到解决方案,具有以下修改。我认为答案将有助于人谁对这个问题的朋友寻找解决方案。因为现在我觉得从我们的老板在最后一分钟presser。

Thanks lot who all are trying to solve my problem friends. I have found solution with following modifications. I think the answer will be helpful to someone who searching solution for this problem friends. Because now I feel the last minute presser from our boss.

首先我的XML变化每@Karan建议。

First my xml changes as per @Karan suggestions.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/linear"        
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/linear1"        
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >
    </LinearLayout>

</LinearLayout>

然后我在这两个MyGraphview和MyGraphview1类覆盖 onMeasure 方法folling设置高度@Merlins建议。

then I override onMeasure method in both MyGraphview and MyGraphview1 classes as folling to set height as @Merlins suggestions.

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
            this.setMeasuredDimension(width, height);
        }

宽度和高度

Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();
height /= 2;

然后的onCreate 改变方法

LinearLayout lv1 = (LinearLayout) findViewById(R.id.linear);
LinearLayout lv2 = (LinearLayout) findViewById(R.id.linear1);
values = calculateData(values);
values1 = calculateData(values1);

MyGraphview graphview = new MyGraphview(this, values);
MyGraphview1 graphview1 = new MyGraphview1(this, values1);

lv1.addView(graphview);
lv2.addView(graphview1);

这篇关于无法在Android中增加addView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆