我需要在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
有人可以告诉我我犯了什么错误。
答案 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
中呼叫getHeight
和onCreate
,但无法确定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;
}
});