我需要获取我在 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
有人可以告诉我我犯了什么错误。
您正在尝试在绘制视图之前获取宽度/高度。
试试这个:
vv.post(new Runnable() {
@Override
public void run() {
// get height and width here
}
});
view.post(Runnable)
会导致将可运行对象添加到消息队列中。可运行的将在 UI 线程上运行。
我已经在最后测试了这段代码。就在onCreate()结束之前。只需写下这些行。
VideoView videoView = (VideoView) findViewById(R.id.videoView);
videoView.post(new Runnable() {
@Override
public void run() {
Log.e("",""+videoView.getHeight()+" "+videoView.getWidth());
}
});
如果您有任何疑问,请告诉我。
您可以在 onCreate
中调用 getWidth
和 getHeight
,但您无法确定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
}
});
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;
}
});
试试这个代码 还要检查此链接以计算方便的尺寸
DisplayMetrics dm;//Declare
更新此行代码
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 的视频
你需要在 view.post(可运行)中运行