Fragment 内の Canvas で線を引こうとしています。いくつかの調査の結果、View クラスを拡張して onDraw をオーバーライドし、通常はレイアウトを拡張する新しい View クラスのインスタンスを返すだけでよいことがわかりました。ただし、デバイスでフラグメントにアクセスすると、白い画面しか表示されません。これが私がこれまでに持っているものです:
package com.example.testing;
import android.app.Fragment;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.os.Bundle;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class LineTab extends Fragment
{
private class DrawView extends View {
Paint paint = new Paint();
public DrawView(Context context) {
super(context);
paint.setColor(Color.BLACK);
}
public DrawView(Context context, AttributeSet attrs) {
super(context, attrs);
paint.setColor(Color.BLACK);
}
public DrawView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
paint.setColor(Color.BLACK);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawLine(0, 0, 50, 50, paint);
canvas.drawLine(50, 0, 0, 50, paint);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
this.setMeasuredDimension(parentWidth, parentHeight);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
return new DrawView(this.getActivity());
}
}
ここで何が欠けていますか?
編集:この問題に直面している他の人にとって、このコードは正常に機能することが判明しました。アクティビティ内での表示に問題がありました。