我需要帮助的朋友。
这是我的活动
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
<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>
这是我的结果
但预期结果是
我的代码朋友出了什么问题。请帮我。提前谢谢。
如果我删除了参数,那么它就是
addView(视图); 并删除索引
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);
然后我的输出是:
答案 0 :(得分:2)
您可以删除参数,以便
lv1.addView(graphview);
lv1.addView(graphview1);
在你的情况下,你不需要它。
更新:现在将权重加到每个1。
graphview.setLayoutParams(new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,1));
graphview1.setLayoutParams(new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,1));
答案 1 :(得分:2)
这里的问题是您将两个子视图的高度和宽度设置为线性布局值。
你应该只使用高度的一半来适应;)
<强>更新强>
你可以使用权重,如下:
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT);
params.weight = 1.0f;
graphview.setLayoutParams(params);
graphview1.setLayoutParams(params);
或者你可以从lv1 params获得高度:
LinearLayour.LayoutParams lvparams = lv1.getLayoutParams();
int lvHeight = lvParams.height;
然后将该高度乘以0.5并在视图布局中将其用作高度参数而不是WRAP_CONTENT
答案 2 :(得分:1)
我想你应该添加另一个linearlayout并添加你的addview 例如......
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
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);
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));
lv2.addView(graphview1, 0);
}
并且不要忘记在xml中添加linearlayout ...
答案 3 :(得分:0)
非常感谢所有人都在努力解决我的问题朋友。我找到了以下修改的解决方案。我认为答案对于那些为这个问题寻找解决方案的朋友有帮助。因为现在我感觉到老板的最后一分钟压力。
首先我的xml根据@Karan建议进行更改。
<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
方法,将高度设置为@Merlins建议。
@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);