2011-10-24 36 views
5

Tôi mới sử dụng java nên không có gì. Tôi đang sử dụng VideoViewMediaController cho một ứng dụng tôi đang làm việc. Tôi chỉ đơn giản muốn có các MediaController xuất hiện trên đầu trang của tôi VideoView nhưng dường như bạn không thể làm điều đó rất dễ dàng. Tôi đã cố gắng sử dụng phương pháp setAnchorView cho id VideoView của mình, nhưng điều đó không hiệu quả. Bất kể tôi làm gì, MediaController luôn ở cuối màn hình của tôi.Mở rộng MediaController cho android

Với điều đó đã nói, tôi đã thực hiện một số nghiên cứu và có vẻ như tôi mở rộng MediaController, tôi có thể thay đổi vị trí và các thuộc tính khác. Tôi đã tạo ra một lớp mới:

package com.dop.mobilevforum; 

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

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

và trong lớp cha mẹ của tôi:

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); 
} 

Nó ở trên đang làm việc, mặc định của tôi MediaController vẫn bật lên và có tất cả các chức năng tương tự. Câu hỏi là bây giờ, làm cách nào để tôi thực sự định vị lại bộ điều khiển từ bên trong lớp VFPlayer của mình?

enter image description here

+0

vẫn bị mắc kẹt trên điều này:/ – Ronnie

+0

Tôi sử dụng [giải pháp này] (http://stackoverflow.com/a/9563643/544419) để thay đổi vị trí MediaController. Hy vọng điều này sẽ giúp bạn. – Rongan

Trả lời

16

Cách ưa thích để kiểm soát vị trí của MediaController là qua setAnchorView. Rất tiếc, VideoView dường như ghi đè giá trị này làm chế độ xem gốc của chính nó bất cứ khi nào một video mới được tải. Để đối phó với hành động này, một lớp học như sau nên làm việc

public class ConstantAnchorMediaController extends MediaController 
{ 

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

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

Khi bạn làm điều đó, bạn có thể sử dụng MediaController này để thiết lập Neo để bất cứ xem bạn mong muốn mà không cần lo lắng về VideoView của bạn thay đổi nó. Sau đó, nó chỉ là một vấn đề nhận được một cái nhìn ở đúng nơi để neo nó quá.

+0

Tôi đã thử những gì bạn đề xuất trong đoạn thứ hai của mình.Tôi đã thực hiện một View 1x1 và đặt nó ở phía trên cùng của màn hình của tôi và thử phương thức setAnchorView cho nó và nó không kết thúc làm việc – Ronnie

+0

Điều gì đã xảy ra? Ngoài ra, để chắc chắn, bạn phải tạo MediaController của bạn lập trình để làm việc. Bạn đã làm điểu đó? –

+0

Tôi đang tạo nó theo chương trình. Không có gì khác xảy ra. Nó tự đặt ngay bên dưới video. Tôi xin thề, setAnchorView đã không tạo ra sự khác biệt nào cho dù tôi xem nó ở đâu? – Ronnie

1

Bạn sẽ có thể ghi đè lên các phương pháp

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

trong lớp VFPlayer của bạn. Từ đây, hãy đặt chế độ xem/tiện ích con nơi bạn muốn.

+0

bạn có thể giải thích về điều này không? Nếu tôi có thể ghi đè phương thức đó trong VFPlayer.java của tôi, điều đó thật tuyệt, nhưng tôi không biết bắt đầu từ đâu ngay cả khi bắt đầu – Ronnie

1

gì tôi đã học một số months ago về Android là thế này:

Khi difficultys đến, làm cho các thành phần riêng của bạn.

Ý tôi là, dễ dàng tạo bố cục các thành phần, chiều rộng 4 hoặc năm ImageButtons/Buttons và liên kết chúng với các chức năng thành phần VideoView (hoặc SurfaceView để kiểm soát tốt hơn).

Một số chức năng VideoView (chiết xuất từ ​​here):

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

Sau đó, bạn có thể làm cho một số diện với các nút để đặt chúng nơi bạn muốn, mà không có vấn đề cố gắng mở rộng một phần cứng như V.

Các vấn đề liên quan