2009-11-18 4 views
8

Ich habe eine layout.xml-Datei mit dem folgenden XML erstellt, aber ich kann den MediaController überhaupt nicht erscheinen.Wie kann ich einen Android MediaController aus dem Layout-XML herauskommen lassen?

Im Code kann ich einen Verweis auf es aus dem Code abrufen, rufen Sie show() usw. auf, aber es erscheint nie.

Ich habe in der Android-Entwickler Dokumentation (MediaController.html) festgestellt, dass es heißt: "Die Art und Weise, diese Klasse zu verwenden, ist es instanziieren es programmatisch.", So vielleicht bin ich ein dufus und muss nur etwas anders wie mach nicht, was ich tue. :)

Ich kann es bekommen, wenn ich es programmatisch mache, aber ich brauche es immer auf dem Bildschirm erscheinen. Bin ich nur dumm oder soll es einfach nicht über XML aufgeblasen werden?

Antwort

16

Von this sample project suchen:

ctlr=new MediaController(this); 
ctlr.setMediaPlayer(video); 
video.setMediaController(ctlr); 

Dann wird es angezeigt, wenn Sie auf den Bildschirm tippen t owards den unteren Rand Ihrer VideoView.

In Bezug auf es auf dem Bildschirm halten die ganze Zeit ... Ich weiß nicht, ob das möglich ist. Sie können immer Ihren eigenen Controller erstellen - here's a sample project, der einen eigenen transparenten Controller erstellt. Es ist wirklich nicht so schwer, und Sie haben die volle Kontrolle über alles, einschließlich dafür, dass es ständig auf dem Bildschirm angezeigt wird.

+1

ctlr.show (0) zeigt den Controller, bis Verstecken Sir heißt –

0

http://www.docstoc.com/docs/9811647/Media-on-the-Android-Platform

Dieses Dokument schlägt vor, Sie den Controller erweitern müssen möglicherweise das Verhalten zu erhalten, die Sie benötigen.

Sie auch für eine sehr lange Zeit zeigen konnte, nehme ich an;)

Ich kämpfe derzeit sogar den Controller bekommen zu zeigen, dann drücke ich einen Knopf: \

(auch interessant, wie schnell google hat diese Frage Treffer)

1

Mit show (0) Media Controller wird angezeigt, bis hide() durch eine Interaktion mit dem Player aufgerufen wird. Ich fand leider keine Möglichkeit, verstecken zu verhindern() Noch ;-(

MediaController mc = new MediaController(MPlayer.this); 
mc.setMediaPlayer(MPlayer.this); 
mc.setEnabled(true); 

View mMediaControllerView = (View)findViewById(R.id.media_controller); //get it from your layout 

mc.setAnchorView(mMediaControllerView); 
mMediaControllerView.setOnTouchListener(mPlayerTouchListener);//also use show() in onTouchListener 

new Handler().postDelayed(new Runnable() { 

    public void run() { 
     mc.show(0); 
    } }, 1500); 

Warten auf Bildschirm, um buid einen Fehler in Android zu vermeiden (1,5 Sekunden hier)

9

Sie können verhindern, dass die MediaController- Verlängerung MediaController- und Überschreibung ausgeblendet aus seinem Versteck() nichts tun zB.

class UnhideableMediaController extends MediaController 
{ 
    // override whichever contstructors you need to. 
    public UnhideableMediaController(Context context) 
    { 
     super(context); 
    } 

    // override hide to do nothing 
    public void hide() 
    { 
     // don't hide 
    } 
} 
0

Als meinen MediaController- in einer Layout-Datei erklärt, den Griff in Code bekommen (die Activity.findViewById(int id) Methode) und es zu meinem Videoview Anbringen (unter Verwendung der VideoView.setMediaController(MediaController controller) Methode), I finde es sich unerwünscht (Force schließt die App) zeitweise. Stattdessen habe ich es im Code erstellen, verbinden Sie es mit dem Videoview und dann angeben, wo sie in der Aktivität mit der VideoView.setAnchorView(View view) Methode angezeigt werden soll, wie folgt:

myVideoView.setVideoURI(Uri.parse(myVideoUrl)); 
myVideoView.setOnPreparedListener(new OnPreparedListener() 
{ 
    public void onPrepared(MediaPlayer mp) 
    { 
    MediaController mediaController = new MediaController(MyActivity.this); 
    videoView.setMediaController(mediaController); 

    // put the MediaController at the bottom of the Activity rather than directly beneath the VideoView 
    // (note that my Activity's layout file has root node with id 'myactivity_layoutroot') 
    if (findViewById(R.id.myactivity_layoutroot) != null) 
     mediaController.setAnchorView(findViewById(R.id.myactivity_layoutroot)); 

    videoView.requestFocus(); 
    } 
}); 
myVideoView.start(); 
2

Sie können eine MediaController- aus dem Layout xml aufzublasen. Auch nach Erhalt einer Referenz davon kann ein Videobild als Anker gesetzt werden.

  • Aber das wird so schnell zu einem Absturz führen, wie Sie MediaController- zu berühren versuchen (Ich versuche, warum sein Vorkommnis, um herauszufinden).

Auch in diesem MediaController wird immer angezeigt.

<?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" 
    android:orientation="vertical" > 

    <VideoView 
     android:id="@+id/mVideoView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <MediaController 
     android:id="@+id/mediaController1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:focusable="false" 
     android:focusableInTouchMode="false"/> 
</RelativeLayout> 

In Tätigkeit

public class AnimationActivity extends Activity implements OnClickListener { 

    private MediaController mController = null; 
    private VideoView mVideoView = null; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_animation); 
     mController = (MediaController) findViewById(R.id.mediaController1); 
     mController.post(new Runnable() { 
      @Override 
      public void run() { 
       mVideoView = (VideoView) findViewById(R.id.mVideoView); 
       mVideoView.setVideoURI(Uri.parse("android.resource://" 
         + getPackageName() + "/" + R.raw.video0)); 
       mController.setAnchorView(mVideoView); 
       mVideoView.setSoundEffectsEnabled(false); 
       mVideoView.start(); 
      } 
     }); 
    } 
} 
0

ich denke, es Ihr "mVideoView.setVideoURI" Abschnitt ist. Ich habe kürzlich an einer ähnlichen Sache gearbeitet, einschließlich dieses und es scheint, dass das Video über den Server abgerufen werden muss. Du musst deine Videos auf einem Server speichern und dann hier anrufen. Genau das ist mit mir passiert.

Verwandte Themen