2011-08-15 8 views
6

私はいくつかの画像の特定の位置に表示する必要があるViewを持っています。私はAbsoluteLayoutを使って既に行っていますが、使用したくないので同じ結果を得ようとしています。 FrameLayoutを使用します。FrameLayoutで絶対位置を変更する

しかし、私はこの作業を取得することはできません、これは私の2回です。

public void showVideo(RectF bounds) { 
    FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) video.getLayoutParams(); 
    params.width = (int) bounds.width(); 
    params.height = (int) bounds.height(); 
    int x = (int) viewer.getPageXOffset(); 
    int y = (int) viewer.getPageYOffset(); 

    video.setPadding((int) (x + bounds.left), (int) (y + bounds.top), (int) (x + bounds.right), 
      (int) (y + bounds.bottom)); 

    video.setLayoutParams(params); 
    video.invalidate(); 

    video.setVisibility(View.VISIBLE); 
    video.setFocusable(true); 
    video.setFocusableInTouchMode(true); 
    video.requestFocus(); 
} 

そして:

public void showVideo(RectF bounds, final String videoUrl) { 
    FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) video.getLayoutParams(); 
    params.width = (int) bounds.width(); 
    params.height = (int) bounds.height(); 
    int x = (int) (viewer.getPageXOffset() + bounds.left); 
    int y = (int) (viewer.getPageYOffset() + bounds.top); 

    params.leftMargin = x; 
    params.topMargin = y; 

    video.setLayoutParams(params); 
    video.invalidate(); 

    video.setVisibility(View.VISIBLE); 
    video.setFocusable(true); 
    video.setFocusableInTouchMode(true); 
    video.requestFocus(); 
} 

しかし、どちらの場合も、VideoViewがvで表示されます(0,0 )(左上隅)。

+0

レイアウトを動的にコードで作成する必要がありますか?私はFrameLayoutをXMLで扱うときにこの種の問題を経験したことはありません – Egor

+0

実際には、現在の(AbsoluteLayoutなし)特定の位置に表示されるビューを1つだけ表示する必要があり、この位置は実行時に計算されます。 –

+1

も ​​'view.setTranslationX()'または 'view.offsetLeftAndRight()'を参照してください。 –

答えて

17

LayoutParamsで重力を設定すると効果があります。

は開始のための

params.gravity = Gravity.LEFT | Gravity.TOP; 

を試してみてください。