我有一个应用程序,以图形方式显示一些数据。它创建两个视图来绘制图形并将它们添加到我的布局中。每个视图以不同的方式显示数据,但每个视图实现onSizeChanged()的方式相同:

        protected void onSizeChanged(int curw, int curh, int oldw, int oldh) {
        if (bitmap2 != null) {
            bitmap2.recycle();
        }
        canvas2= new Canvas();
        bitmap2 = Bitmap.createBitmap(curw, curh, Bitmap.Config.ARGB_8888);
        canvas2.setBitmap(bitmap2);
    }

这些视图是通过以下方式调用的:
      LinearLayout myLayout = (LinearLayout)findViewById(R.id.revlay);

      GraphView1 graphView1 = new GraphView1(this, theEventArrayList);
      myLayout.addView(graphView1);

      GraphView2 graphView2 = new GraphView2(this, theEventArrayList);
      myLayout.addView(graphView2);

总是调用的第一个onSizeChanged()的高度为652,宽度为480;第二个onSizeChanged()的高度为0,这将导致createBitmap()失败。如果我颠倒了上述调用的顺序,那么graphview1将以这种方式失败。我希望每个位图有大约一半的面积。
提前感谢你解释发生了什么事!

最佳答案

如果不知道图形视图和linearlayout布局参数的进一步实现细节,很难回答您的问题。
但假设您的线性布局具有水平方向,请尝试以下操作:

GraphView1 graphView1 = new GraphView1(this, theEventArrayList);
GraphView2 graphView2 = new GraphView2(this, theEventArrayList);
myLayout.addView(graphView2, new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 0, 1));
myLayout.addView(graphView1, new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, 0, 1));

这将告诉线性布局来安排您的视图,以便它们平均划分它们之间的水平空间。

09-07 15:06