
使用galaxy Note,HTC One m7,Xperia Z3,Nexus 5进行测试.
这是代码:
public class MainActivity extends ActionBaractivity implements SurfaceHolder.Callback,OnClickListener{ private static final int VIDEO_START_Hack_DELAY = 0; private static final String BG_VIDEO_PATH = "/raw/construction"; private SurfaceVIEw mSurface; private button mTour,mLogin; private MediaPlayer mMediaPlayer; private Handler mHandler = new Handler(); @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_start_main); setupUI(); } private voID setupUI() { mMediaPlayer = new MediaPlayer(); mSurface = (SurfaceVIEw) findVIEwByID(R.ID.surface); SurfaceHolder holder = mSurface.getHolder(); holder.addCallback(this); mTour = (button) findVIEwByID(R.ID.tour); mLogin = (button) findVIEwByID(R.ID.login); mTour.setonClickListener(this); mLogin.setonClickListener(this); } @OverrIDe public voID surfaceCreated(SurfaceHolder holder) { startVIDeo(holder); } @Suppresslint("NewAPI") public voID startVIDeo(SurfaceHolder holder) { String path = "androID.resource://" + getPackagename() + BG_VIDEO_PATH; Uri uri = Uri.parse(path); try { androID.vIEw.VIEwGroup.LayoutParams lp = mSurface.getLayoutParams(); mMediaPlayer.setdisplay(holder); mMediaPlayer.setDataSource(this,uri); mMediaPlayer.setVIDeoScalingMode(MediaPlayer.VIDEO_SCAliNG_MODE_SCALE_TO_FIT_WITH_CROPPing); mMediaPlayer.setLooPing(true); mMediaPlayer.setonPreparedListener(new OnPreparedListener() { @OverrIDe public voID onPrepared(MediaPlayer mp) { mHandler.postDelayed(new Runnable() { @OverrIDe public voID run() { mMediaPlayer.start(); } },VIDEO_START_Hack_DELAY); } }); mMediaPlayer.prepareAsync(); } catch (Exception e) { Log.e("VID","Problem starting vIDeo bg",e); } } @OverrIDe public voID surfaceChanged(SurfaceHolder holder,int format,int wIDth,int height) { // Todo auto-generated method stub } @OverrIDe public voID surfaceDestroyed(SurfaceHolder holder) { // Todo auto-generated method stub } @OverrIDe public voID onBackpressed() { mSurface.setVisibility(VIEw.INVISIBLE); mMediaPlayer.stop(); super.onBackpressed(); } @OverrIDe protected voID onDestroy() { mMediaPlayer.stop(); mMediaPlayer.release(); super.onDestroy(); }} 这是布局文件:
<?xml version="1.0" enCoding="utf-8"?><relativeLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" > <SurfaceVIEw androID:ID="@+ID/surface" androID:layout_wIDth="fill_parent" androID:layout_height="fill_parent" /> <linearLayout androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content" androID:layout_alignParentBottom="true" androID:layout_marginBottom="40dp" androID:gravity="center" androID:orIEntation="vertical" > <button androID:ID="@+ID/tour" androID:layout_height="wrap_content" androID:layout_wIDth="wrap_content" androID:textAppearance="@style/Base.TextAppearance.AppCompat.Medium" androID:padding="10dp" androID:text="@string/ma_tour"/> <button androID:ID="@+ID/login" androID:layout_height="wrap_content" androID:layout_wIDth="wrap_content" androID:padding="10dp" androID:textAppearance="@style/Base.TextAppearance.AppCompat.Medium" androID:text="@string/ma_log_in"/> </linearLayout></relativeLayout>
目标sdk设置为22.
您是否经历过这样的行为并且可以提出任何建议?
>在MediaPlayer对象上设置OnPreparedListener.
mediaPlayer.setonPreparedListener(本);
>当调用publicPrepared(MediaPlayer mp)时,调整SurfaceVIEw的大小,使其产生裁剪视频的错觉.
Log.v(LOG_TAG,“onPrepared调用MediaPlayer”);
//调整视频大小,使其适合屏幕
int vIDeoWIDth = mInitialVIDeoPlayer.getVIDeoWIDth();
int vIDeoHeight = mInitialVIDeoPlayer.getVIDeoHeight();
float vIDeoProportion =(float)vIDeoWIDth /(float)vIDeoHeight;
VIEwGroup.LayoutParams lp = mSplashVIDeoSurfaceVIEw.getLayoutParams();// We always want to fill entire vIEw port. So,we keep the smallest dimension and proportionately// scale the other dimension.if (vIDeoWIDth < vIDeoHeight) { lp.wIDth = UiUtils.sScreenWIDth; lp.height = (int) ((float) UiUtils.sScreenWIDth / vIDeoProportion);} else { lp.wIDth = (int) (vIDeoProportion * (float) UiUtils.sScreenHeight);If you are targetting API level 14 and above,<code>TextureVIEw</code> allows you to play cropped vIDeo lp.height = UiUtils.sScreenHeight;}Log.v(LOG_TAG,"old vIDeo size: " + vIDeoWIDth + "," + vIDeoHeight);Log.v(LOG_TAG,"screen size: " + UiUtils.sScreenWIDth + "," + UiUtils.sScreenHeight);Log.v(LOG_TAG,"new vIDeo size: " + lp.wIDth + "," + lp.height);mSplashVIDeoSurfaceVIEw.setLayoutParams(lp); 总结 以上是内存溢出为你收集整理的android – Nexus 6和MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);全部内容,希望文章能够帮你解决android – Nexus 6和MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)