私は、キャンバスを持つ2つのビューをプログラムでプログラムで追加しようとしていますが、最初のものだけが追加されているようです(コンソール出力を見ればわかります)。私は間違って何をしていますか?あなたはレイアウトパラメータを指定せずにroot
へのあなたの意見を追加しているAndroidはプログラムでキャンバスで2つのビューを追加します
package app.com.example.android.drawtwoviews;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.LinearLayout;
public class MainActivity extends AppCompatActivity {
DrawView drawView;
DrawView2 drawView2;
private LinearLayout root;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
root = new LinearLayout(this);
root.setOrientation(LinearLayout.VERTICAL);
drawView = new DrawView(this);
drawView.setBackgroundColor(Color.WHITE);
root.addView(drawView);
drawView2 = new DrawView2(this);
drawView2.setBackgroundColor(Color.WHITE);
root.addView(drawView2);
setContentView(root);
}
public class DrawView extends View {
Paint paint = new Paint();
public DrawView(Context context) {
super(context);
}
@Override
public void onDraw(Canvas canvas) {
System.out.println("DrawView1");
paint.setColor(Color.BLACK);
//paint.setStrokeWidth(3);
canvas.drawRect(30, 30, 80, 80, paint);
}
}
public class DrawView2 extends View {
Paint paint = new Paint();
public DrawView2(Context context) {
super(context);
}
@Override
public void onDraw(Canvas canvas) {
System.out.println("DrawView2");
paint.setColor(Color.BLUE);
paint.setStrokeWidth(3);
canvas.drawRect(300, 300, 400, 400, paint);
}
}
}
これは素晴らしい動作です!私は、(LayoutParamsの)heightパラメータを0に設定すると、効果的に高さを最小限に設定して、キャンバスが占めることを確認したいと思います。 – Naci
'LayoutParams.height'に0を設定するのは、' LayoutParams.weight'が存在するためです。高さ0は、 "layout_weightのみで行く"という意味です。 DrawViewの最小サイズを設定するには、LinearLayoutが最小サイズを取得できるようにonMeasure()実装を追加し、1つのDrawViewのLayoutParamsで 'height = LayoutParams.WRAP_CONTENT'を使用し、' height = 0、weight =他のDrawViewのLayoutParamsに「1」を追加します。 – Barend