I napotkać ten sam problem niedawno, używając setAnchorView (videoView) będzie ustawić regulator w pełni pod VideoView zamiast unosić się na dolnej powierzchni niego. Mój VideoView to trzeci ekran w górnym obszarze, więc kontroler kończy się na tym, co obejrzy View w VideoView.
Poniżej jest droga ja w końcu robi to bez pisania pełnowymiarową niestandardowego sterownika (tylko nadrzędnymi onSizeChanged
z MediaController przenieść kotwica w górę):
Zastosowanie FrameLayout jako kotwica dla MediaContoller, owinąć go wraz z VideoView jak poniżej:
<RelativeLayout
android:id="@+id/videoLayout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1.3"
android:layout_gravity="center"
android:background="#000000">
<VideoView
android:id="@+id/videoView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true" />
<FrameLayout android:id="@+id/controllerAnchor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
/>
</RelativeLayout>
Tworzenie niestandardowego MediaController które będą poruszać FrameLayout górę (z MediaController który jest przymocowany do niego pójdą), gdy jego wielkość zmiany:
public class MyMediaController extends MediaController
{
private FrameLayout anchorView;
public MyMediaController(Context context, FrameLayout anchorView)
{
super(context);
this.anchorView = anchorView;
}
@Override
protected void onSizeChanged(int xNew, int yNew, int xOld, int yOld)
{
super.onSizeChanged(xNew, yNew, xOld, yOld);
RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) anchorView.getLayoutParams();
lp.setMargins(0, 0, 0, yNew);
anchorView.setLayoutParams(lp);
anchorView.requestLayout();
}
}
Użyj przycisku sterowania niestandardowe powyżej w miejsce standardowego, a następnie umieścić go na FrameLayout:
protected void onCreate(Bundle savedInstanceState)
{
//...
videoView = (VideoView) findViewById(R.id.videoView1);
videoController = new MyMediaController(this, (FrameLayout) findViewById(R.id.controllerAnchor));
videoView.setMediaController(videoController);
//...
}
public void onPrepared(MediaPlayer mp)
{
videoView.start();
FrameLayout controllerAnchor = (FrameLayout) findViewById(R.id.controllerAnchor);
videoController.setAnchorView(controllerAnchor);
}
Jestem zainteresowany tym, jak dobrze. Czy kiedykolwiek to rozgryzłeś? – Ronnie
Nie, nigdy tego nie zrobiłem. –
Spójrz na to pytanie http://stackoverflow.com/questions/6093756/how-to-re-position-mediacontroller – Sandeep