【问题标题】:Extending MediaController for android为 android 扩展 MediaController
【发布时间】:2018-06-21 15:32:40
【问题描述】:

我正在为我正在开发的应用程序使用VideoViewMediaController。我只是想让MediaController 出现在我的VideoView 之上,但显然你不能轻易做到这一点。我试图对我的VideoView id 使用setAnchorView 方法,但这不起作用。无论我做什么,MediaController 总是在我的屏幕底部。

话虽如此,我做了一些研究,看起来好像我要扩展MediaController,我可以更改位置和其他属性。我创建了一个新类:

package com.dop.mobilevforum;

import android.content.Context;
import android.widget.MediaController;

public class VFPlayer extends MediaController
{
    public VFPlayer(Context context)
    {
        super(context);
    }
}

在我的父类中:

public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.vforum);

    controller  = new VFPlayer(this);
    vidPlayer   = (VideoView) findViewById(R.id.vidPlayer);
    vidPlayer.setMediaController(controller);
}

上面的工作正常,我的默认MediaController 仍然会弹出并具有所有相同的功能。现在的问题是,我该如何从VFPlayer 类中实际重新定位控制器?

【问题讨论】:

  • 我使用this solution 来更改 MediaController 的位置。希望这对您有所帮助。

标签: android subclass mediacontroller


【解决方案1】:

控制 MediaController 位置的首选方法是通过setAnchorView。不幸的是,每当加载新视频时,VideoView 似乎都会将此值覆盖为自身的父视图。为了解决这个问题,像下面这样的类应该可以工作

public class ConstantAnchorMediaController extends MediaController
{

    public ConstantAnchorMediaController(Context context, View anchor)
    {
        super(context);
        super.setAnchorView(anchor);
    }

    @Override
    public void setAnchorView(View view)
    {
        // Do nothing
    }
}

完成此操作后,您可以使用此 MediaController 将 Anchor 设置为您想要的任何视图,而无需担心您的 VideoView 会更改它。在那之后,它只是在正确的位置获得一个视图来锚定它。

【讨论】:

  • 我尝试了您在第二段中的建议。我制作了一个 1x1 dip View 并将其放在屏幕的最顶部并尝试了 setAnchorView 方法,但它最终没有工作
  • 发生了什么?此外,可以肯定的是,您必须以编程方式创建 MediaController 才能使其正常工作。你这样做了吗?
  • 我正在以编程方式创建它。没有发生任何不同。它位于视频的正下方。我发誓,无论我将它设置为什么视图,setAnchorView 都没有任何区别
  • 您确定视图位于您想要的位置吗?我只是想覆盖所有的基础。您可以做的另一件事是我在第一段中提到的。覆盖 show() 方法并使用布局参数将控制器放置在您想要的位置。如果您设置 p.y = 0 而不是我发布的内容,它应该将控制器放在屏幕顶部。
  • 是的,我很肯定。当我在图形视图中查看 xml 时,它位于屏幕顶部。如果我复制上面的 show 方法并将其粘贴到我的 VFPlayer.java 中,我会遇到一堆错误,例如未解析的变量和东西。我认为当您扩展某些内容时,您会自动访问您正在扩展的所有内容。我添加了一张我现在看到的图片。
【解决方案2】:

你应该能够覆盖

android.view.View.OnLayout(boolean, int, int, int, int)

VFPlayer 类中的方法。从这里将视图/小部件放在您想要的位置。

【讨论】:

  • 你能详细说明一下吗?如果我可以在我的 VFPlayer.java 中覆盖该方法,那就太好了,但我什至不知道从哪里开始
【解决方案3】:

几个月前我对 Android 的了解是这样的:

遇到困难,自己做组件

我的意思是,这很容易让你的组件布局,宽度为 4 或 5 个 ImageButtons/Buttons,并将它们链接到 VideoView 组件功能(或 SurfaceView 以获得更好的控制)。

一些VideoView函数(摘自here):

start() -> To start a video play
pause() -> To pause it
seekTo(int msec) -> To go the exactly place , using it with a SeekBar
...

然后,您可以使用按钮制作一些布局,以便将它们放在您想要的位置,而不会尝试扩展像 V 这样的刚性组件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 2020-02-07
    • 2023-03-06
    • 1970-01-01
    相关资源
    最近更新 更多