android – Nexus 6和MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);

android – Nexus 6和MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);,第1张

概述嗨,我正在尝试使用视频文件制作背景活动.下面发布的解决方案适用于大多数设备,但nexus 6 Android 5.1除外.视频正在运行,缩放但未裁剪,因此不保留纵横比. 使用Galaxy Note,HTC One m7,Xperia Z3,Nexus 5进行测试. 这是代码: public class MainActivity extends ActionBarActivity implement 嗨,我正在尝试使用视频文件制作背景活动.下面发布的解决方案适用于大多数设备,但nexus 6 Android 5.1除外.视频正在运行,缩放但未裁剪,因此不保留纵横比.

使用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);所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1138237.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存