如何获取活动中包含的VideoView的高度

时间:2015-01-15 11:03:57

标签: android android-videoview mediacontroller

我需要在android中获取我的活动的VideoView的高度,我使用以下命令,但它给我的高度为0。

VideoView vv = (VideoView)findViewById(R.id.video1);
String surl="SOME_LINK.mp4";
        Uri uri=Uri.parse(surl);
        MediaController mc = new MediaController(this);
        vv.setVideoURI(uri);
        vv.setMediaController(mc);
        mc.setMediaPlayer(vv);
        mc.setAnchorView(vv);
        int vvHeight=vv.getMeasuredHeight();
        Log.d("VideoView Height:",vvHeight+""); // The Logcat output : 0.
        int VVheight=vv.getHeight();
        Log.d("The Height of VideoView is :",VVheight+""); // The Logcat output : 0

有人可以告诉我我犯了什么错误。

5 个答案:

答案 0 :(得分:6)

您正在尝试在绘制视图之前获取宽度/高度。

试试这个:

vv.post(new Runnable() { 
@Override
  public void run() {
    // get height and width here
  }
});

view.post(Runnable)会将runnable添加到消息队列中。 runnable将在UI线程上运行。

答案 1 :(得分:2)

我已经在我的最后测试了这段代码。就在onCreate()结束之前。只需写下这些行。

VideoView videoView = (VideoView) findViewById(R.id.videoView);
videoView.post(new Runnable() {

            @Override
            public void run() {

                Log.e("",""+videoView.getHeight()+" "+videoView.getWidth());
            }
        });

如果您有任何疑问,请告诉我。

答案 2 :(得分:1)

您可以在getWidth中呼叫getHeightonCreate,但无法确定View是否已完全创建,因此这些方法将返回0。 作为替代方案,您可以使用ViewTreeObserver

VideoView vv = (VideoView)findViewById(R.id.video1);
ViewTreeObserver vto = vv.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

    @Override
    public void onGlobalLayout() {
        // Use getHeight here
        ViewTreeObserver obs = vv.getViewTreeObserver();

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
            obs.removeOnGlobalLayoutListener(this);
        } else {
            obs.removeGlobalOnLayoutListener(this);
        }
    }

});

或者,您可以在视图上发布Runnable。它将放在UI线程队列的末尾,因此在运行时,已经测量了布局,getHeight返回正确的度量。

vv.post(new Runnable() { 
    @Override
    public void run() {
        // Use getHeight here
    }
});

答案 3 :(得分:0)

尝试此代码也请检查此link以计算方便尺寸

DisplayMetrics dm; //声明

//更新此行代码

dm = new DisplayMetrics(); 
this.getWindowManager().getDefaultDisplay().getMetrics(dm);
int height = dm.heightPixels;
int width = dm.widthPixels;

//尝试此行代码

MediaPlayer mp = new MediaPlayer();
mp.setDataSource(uriString);
mp.prepare();
int width = mp.getVideoWidth();
int height = mp.getVideoHeight();

注意:如果您使用android:layout_width:match_parent和`android:layout_height:match_parent来填充所有屏幕宽度和高度并避免视频拉伸并保持纵横比,则应使用尺寸比为16:9的视频< / p>

您需要在view.post(Runnable)

中运行

答案 4 :(得分:0)

VideoView vv = (VideoView)findViewById(R.id.video1);

ViewTreeObserver vto = vv.getViewTreeObserver();

vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
 public boolean onPreDraw() {
     vv.getViewTreeObserver().removeOnPreDrawListener(this);
     finalHeight = vv.getMeasuredHeight();
     finalWidth = vv.getMeasuredWidth();
     Log.d("debug" , "" + "Height: " + finalHeight + " Width: " + finalWidth);
     return true;
                  }
                   });