【问题标题】:How to play Video in Android on click?如何在点击时在 Android 中播放视频?
【发布时间】:2012-10-15 08:59:38
【问题描述】:

我尝试从远程 URL 播放视频并且效果很好,现在的问题是视频开始自动播放,我希望视频像 YouTube 视频一样显示,中间有一个播放按钮,点击视频应该播放。

public class Tabs extends Activity {
TabHost th;
VideoView video;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    //Create tabs using XML 

    video=(VideoView) findViewById(R.id.VideoView);
    String path1="http://www.w3schools.com/html5/movie.mp4";
    MediaController mc = new MediaController(this);
    mc.setAnchorView(video);
    mc.setMediaPlayer(video);
    Uri uri=Uri.parse(path1);
    video.setMediaController(mc);
    video.setVideoURI(uri);
    video.start();
}
}

这是我的代码,它工作得很好,但是视频会自动开始播放,我需要它来显示第一个场景,比如 YouTube 视频,中间有一个播放按钮,点击视频应该开始播放。它还应该显示视频的缩略图

【问题讨论】:

    标签: android video


    【解决方案1】:

    onCreate 中设置视频播放器和URL,并通过实现onClickListener 进行实际播放。

    在您的示例中(请记住导入丢失的包并创建一个 ID 为 buttonStart 的按钮):

    public class Test extends Activity {
        TabHost th;
        VideoView video;
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            // Create tabs using XML
    
            video = (VideoView) findViewById(R.id.VideoView);
            String path1 = "http://www.w3schools.com/html5/movie.mp4";
            MediaController mc = new MediaController(this);
            mc.setAnchorView(video);
            mc.setMediaPlayer(video);
            Uri uri = Uri.parse(path1);
            video.setMediaController(mc);
            video.setVideoURI(uri);
            Button buttonStart = (Button) findViewById(R.id.buttonStart);
            buttonStart.setOnClickListener(new OnClickListener() {
    
                public void onClick(View v) {
                    video.start();
                }
    
            });
    
        }
    }
    

    至于显示缩略图,如果你有它的 URL,你可以启动一个异步任务来检索远程图像并将其覆盖在视频播放器上(使用FrameLayout 来实现覆盖视图)。然后在覆盖的图像上设置一个 onClickListener(参见代码,了解它是如何为按钮完成的,ImageView 可以遵循相同的逻辑)。只要确保你设置了 ImageView to be clickable

    【讨论】:

    • 非常感谢,我现在只需要看看如何覆盖视图:p
    • 其实很简单。如果将它们包装在FrameLayout 中,则元素将自动开始与出现在顶部的代码中的第一个元素、其下方的第二个元素、出现在第二个下方的第三个元素等重叠。不过,您可能需要使用这些背景属性,因为默认情况下某些视图可能没有透明背景(使后面的元素不可见)。
    • 是的,我读到了,是的,它很简单,而且我只有两个视图可以在视频视图上重叠图像视图,如果我遇到任何问题,我会在明天尝试,肯定会在这里发布:)
    • 好的,我实现了在其上覆盖缩略图和播放按钮,但是加载时间太长了有没有办法向用户显示进度条或加载?
    • 是的,您应该查看Async(异步)任务。
    【解决方案2】:

    编写 video.start();在你的按钮上点击监听器。

    谢谢。

    【讨论】:

    • 我没有按钮,我在问如何获得播放按钮并显示视频的缩略图?
    【解决方案3】:

    您可以添加一个按钮并为其添加一个侦听器,而不是在onCreate 方法上流式传输它,然后在其点击事件上您可以流式传输视频

    【讨论】:

      【解决方案4】:

      好的,因为我在 ColorWP 的帮助下完成了这项工作(非常感谢),我想我会发布我所做的:

      这是我使用框架布局重叠缩略图和播放图像的 xml。

      <AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent" >
      
      
          <TextView
              android:id="@+id/textView1"
              android:layout_width="292dp"
              android:layout_height="100dp"
              android:layout_x="7dp"
              android:layout_y="16dp"
              android:text="" />
      
          <FrameLayout
              android:layout_width="fill_parent"
              android:layout_height="281dp"
              android:layout_x="1dp"
              android:layout_y="138dp"
               >
          <RelativeLayout android:layout_width="wrap_content"
              android:layout_height="wrap_content">
              <VideoView
                  android:id="@+id/svid"
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent" />
      
      
      
              <ImageView
                  android:id="@+id/simg"
                  android:layout_width="187dp"
                  android:layout_height="137dp"
                  android:src="@drawable/ic_action_search"
                  android:layout_centerInParent="true" />
              <ImageView
                  android:id="@+id/playimg"
                  android:layout_width="100dp"
                  android:layout_height="87dp"
                  android:src="@drawable/animated_loading"
                  android:layout_centerInParent="true" 
                />
             </RelativeLayout>
          </FrameLayout>
      

      在代码中,我所做的只是在播放图像上设置了一个 ClickListener,所以当用户在屏幕上按下播放图像时,我使用了 video.start()。效果很好:)

      这是我的代码摘录:

       protected void onCreate(Bundle savedInstanceState) {
              // TODO Auto-generated method stub
              super.onCreate(savedInstanceState);
              setContentView(R.layout.single);
              vid=(VideoView) findViewById(R.id.svid);
              iv=(ImageView) findViewById(R.id.simg);
              ip=(ImageView) findViewById(R.id.playimg);
              t=(TextView) findViewById(R.id.textView1);
              final ProgressDialog pd=new ProgressDialog(SingleItem.this);
      
              link="http://www.w3schools.com/html5/movie.mp4";
               String path1=link;
                  MediaController mc = new MediaController(this);
                  mc.setAnchorView(vid);
                  mc.setMediaPlayer(vid);
                  uri=Uri.parse(path1);
                  vid.setMediaController(mc);
                  vid.setVideoURI(uri);
                  vid.requestFocus();
      
                  loadImage(thumb);
      
                  ip.setClickable(true);
                  ip.setImageResource(R.drawable.play);
                  // ip.setVisibility(ImageView.INVISIBLE);
                  vid.setOnPreparedListener(new OnPreparedListener() {
      
                      @Override
                      public void onPrepared(MediaPlayer mp) {
                          // TODO Auto-generated method stub
                          //ip.setVisibility(ImageView.VISIBLE);
                          pd.dismiss();
      
                      }
                  });
                  ip.setOnClickListener(new OnClickListener() {
      
                      @Override
                      public void onClick(View v) {
                          // TODO Auto-generated method stub
      
                           vid.start();
                           pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
                              pd.setMessage("Loading Video...");
                              pd.setIndeterminate(false);
                              pd.setCancelable(true);
                              pd.show();
      
                              if(vid.isPlaying()){
                                   iv.setVisibility(ImageView.INVISIBLE);
                                   ip.setVisibility(ImageView.INVISIBLE);
                               }else{
                                   iv.setVisibility(ImageView.VISIBLE);
                                   ip.setVisibility(ImageView.VISIBLE);
                               }
      
                      }
                  });
      

      希望这会有所帮助:)

      【讨论】:

        猜你喜欢
        • 2016-12-16
        • 2012-05-30
        • 2020-01-16
        • 1970-01-01
        • 2014-11-06
        • 2017-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多