구조체와 같은 패밀리 트리를 Android에서 만들려고합니다. 저는 캔버스를 사용하여 직사각형을 그리며 가족 구성원 이름과 라인을 연결합니다.캔버스에 그리지 않은 여러 개의 사각형
나는 link
의 도움 DrawView.java으로 다음과 같은 방법으로 사각형과 선 그리기하고
나는 아래와 같은 방향 수평으로있는 LinearLayout에 여러 개의보기를 추가하려고 지금import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.Log;
import android.view.View;
public class DrawView extends View {
Paint paint = new Paint();
float mx, my, mdensity;
Paint mBGPaint, mTXTPaint,mLINEPaint,mBRDPaint;
String text;
public DrawView(Context context, float x, float y, float density, String text) {
super(context);
paint.setColor(Color.RED);
paint.setStrokeWidth(8);
paint.setStyle(Paint.Style.STROKE);
mx = x;
my = y;
mdensity = density;
this.text = text;
}
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
init();
mLINEPaint.setStrokeWidth(8);
//draw rect border
canvas.drawRect(100, 100, 200, 200, mBRDPaint);
// //draw text
canvas.drawText(text, 150, 150, mTXTPaint);
// //draw line
float x = mx+150;
canvas.drawLine(x, 10, x, 100, mLINEPaint);
}
public void init() {
//rectangle background
mBGPaint = new Paint();
mBGPaint.setColor(Color.parseColor("#8"));
//your text
mTXTPaint = new Paint();
mTXTPaint.setColor(Color.parseColor("#123456"));
//your line
mLINEPaint = new Paint();
mLINEPaint.setColor(0xFFFF00FF);
//rectangle border
mBRDPaint = new Paint();
mBRDPaint.setStyle(Paint.Style.STROKE);
mBRDPaint.setStrokeWidth(10);
mBRDPaint.setColor(Color.parseColor("#8"));
}
}
:
float density = getApplicationContext().getResources().getDisplayMetrics().density;
DrawView drawView;
float x = 100, y = 200;
int count1 = 1;
int id;
LinearLayout layout2 = new LinearLayout(this);
layout2.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT));
layout2.setOrientation(LinearLayout.HORIZONTAL);
main_layout.addView(layout2);
DrawView drawView1;
CircleView circleView;
for (Map.Entry<String, ArrayList<String>> entry : map.entrySet()) {
String key = entry.getKey();
if (count1 < 2) {
x = dirButton.getX();
y = dirButton.getY();
}
drawView1 = new DrawView(this, x, y, density, key);
drawView1.setId(butId++);
drawView1.setLayoutParams(params);
layout2.addView(drawView1);
count1++;
x = x + 100;
}
하지만 이렇게하면 하나의보기 만 캔버스에 추가되고 다른보기는 표시되지 않습니다. 캔버스에서 안드로이드로 작업 한 경험이 없습니다. 누군가이 문제로 나를 안내 할 수 있다면 기쁠 것입니다.
캔버스 뷰 안에해야하고 당신은 캔버스에 모든 것을 그리는 onDraw() 메소드를 통해. 캔버스에 여러 개의 뷰가 필요하지 않습니다. 캔버스를 업데이트해야 할 때마다 onDraw()를 트리거하는 invalidate() 호출을 실행할 수 있습니다. –
두 직사각형이 같은 xy에 그려져 있다고 생각합니다. 다른 사각형보다 크고 다른 직사각형이 있는지 확인하기 위해 직사각형에 다른 색상을 사용하십시오. – surya
'init)'onDraw'에서 – FunkTheMonk