2011-10-24 93 views
5

我是新來的java,如此裸露與我。我正在爲我正在使用的應用程序使用VideoViewMediaController。我只是想讓MediaController出現在我的VideoView之上,但顯然你不能那麼容易地做到這一點。我試圖將setAnchorView方法用於我的VideoView ID,但這不起作用。無論我做什麼,MediaController總是在我的屏幕底部。擴展MediaController for android

就這樣說,我做了一些研究,它看起來好像我去延伸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課程中實際重新定位控制器?

enter image description here

+0

仍然停留在此:/ – Ronnie

+0

我使用[此解決方案](http://stackoverflow.com/a/9563643/544419)更改MediaController位置。希望這可以幫助你。 – Rongan

回答

16

控制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設置取其查看您渴望,不用擔心你的VideoView改變它的錨。之後,它只是一個在正確的位置獲得看法的問題來錨定它。

+0

我嘗試了您在第二段中的建議。我做了1x1傾角視圖,並將其放置在屏幕的最頂端,並嘗試使用setAnchorView方法,並且它沒有結束工作 – Ronnie

+0

發生了什麼?另外,可以肯定的是,您必須以編程方式創建MediaController才能運行。是你做的嗎? –

+0

我正在以編程方式創建它。沒有什麼不同。它位於視頻下方。我發誓,setAnchorView已經沒有什麼區別了,無論我把它設置爲 – Ronnie

1

您應該能夠覆蓋

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

方法在VFPlayer類。從這裏把視圖/小部件放在你想要的地方。

+0

你能詳細解釋一下嗎?如果我可以在我的VFPlayer.java中覆蓋該方法,那會很好,但我不知道該在哪裏開始 – Ronnie

1

我有什麼學習幾個月前關於Android是這樣的:

當difficultys來,使自己的組件

我的意思是,這很容易讓你的組件佈局,寬度4或5 ImageButtons /按鈕,並將它們鏈接到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.