de-vraag
  • 質問
  • タグ
  • ユーザー
通知:
報酬:
登録
登録すると、質問に対する返答やコメントが通知されます。
ログイン
すでにアカウントをお持ちの方は、ログインして新しい通知を確認してください。
追加された質問、回答、コメントには報酬があります。
さらに
ソース
編集
 alxlabs
alxlabs
質問

LayoutInfalterでxmlレイアウトをレンダリングできません。私は間違っているの?

私はxmlファイルからレイアウトを表示し、その上にベクターベースの画像を描画する必要があります。以下のコードが実行されると、すべてが表示されますが、レイアウトは表示されます。どうして?私は間違っているの?

public class About extends Activity 
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.about); 
    setContentView(new GraphicsView(this));
}

public class GraphicsView extends View
{
    public GraphicsView(Context context)
    {
        super(context);                 
    }
    @Override
    protected void onDraw(Canvas canvas)
    {
        Context context;
        context=getContext();

        View aview; 

        LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);    
        aview = inflater.inflate(R.layout.about, null);                 

        aview.draw(canvas);

        Path circle = new Path();
        Paint cPaint = new Paint(); 
        cPaint.setColor(Color.LTGRAY);
        circle.addCircle(150, 150, 100, Direction.CW);
        canvas.drawPath(circle, cPaint);
        cPaint.setColor(Color.RED);
        canvas.drawTextOnPath("Some stupid text", circle, 0, 20, cPaint);
    }
}

}

0 2011-10-27T22:41:54+00:00 2
プログラミング
android
Romain Guy
28日 10月 2011 в 5:13
2011-10-28T05:13:33+00:00
さらに
ソース
編集
#56793804

ビューを膨張させた後、それを測定し、それを適切な大きさにするためにレイアウトする必要があります。 aview.measure()とaview.layout()を呼び出す前にaview.draw()を呼び出す必要があります。

onDraw()からビューを膨張させる必要はありませんことを忘れないでください。非常に高価で無駄です。同様に、onDraw()の内部に塗料やパスを作成しないでください。

0
0
alxlabs
28日 10月 2011 в 2:59
2011-10-28T14:59:48+00:00
さらに
ソース
編集
#56793805

別のフォーラムから別の答えがあります:

FrameLayout:

 public class About extends Activity 
 { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.about);

       GraphicsView drawing = new GraphicsView(this);

       FrameLayout container = (FrameLayout) findViewById(R.id.container);
       container.addView(drawing);
    } 

    public class GraphicsView extends View 
    { 
       public GraphicsView(Context context) 
       { 
          super(context);                 
       } 
       @Override 
       protected void onDraw(Canvas canvas) 
       { 
          Path circle = new Path(); 
          Paint cPaint = new Paint(); 
          cPaint.setColor(Color.LTGRAY); 
          circle.addCircle(150, 150, 100, Direction.CW); 
          canvas.drawPath(circle, cPaint); 
          cPaint.setColor(Color.RED); 
          canvas.drawTextOnPath("Some stupid text", circle, 0, 20, cPaint); 
       } 
    } 
 }

そしてここにXMLがあります:

<?xml version="1.0" encoding="utf-8"?> 
 
    

0
0
質問の追加
カテゴリ
すべて
技術情報
文化・レクリエーション
生活・芸術
科学
プロフェッショナル
事業内容
ユーザー
すべて
新しい
人気
1
Roxana Elizabeth CASTILLO Avalos
登録済み 6日前
2
Hideo Nakagawa
登録済み 1週間前
3
Sergiy Tytarenko
登録済み 1週間前
4
shoxrux azadov
登録済み 1週間前
5
Koreets Koreytsev
登録済み 1週間前
© de-vraag :年
ソース
stackoverflow.com
ライセンス cc by-sa 3.0 帰属