热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

webview里播放视频,点击全屏后,第一次正常,退出后再次全屏,只有声音没有图像,有对这块了解的吗?

packagecom.example.webview_test;importandroid.annotation.SuppressLint;importandroid.app.Act
package com.example.webview_test;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewParent;
import android.view.Window;
import android.view.WindowManager;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.webkit.WebChromeClient.CustomViewCallback;
import android.widget.Button;
import android.widget.FrameLayout;

public class EswVideoActivity extends Activity implements OnClickListener {

private WebView webView;
private Button back_btn;
private FrameLayout video;
private CustomViewCallback customViewCallback;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_esw_video);
intiview();
LoadUrl();
}

@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
webView.onResume();
}

// 初始化
private void intiview() {
// TODO Auto-generated method stub
webView = (WebView) findViewById(R.id.webview);
back_btn = (Button) findViewById(R.id.back_btn);
// 声明video,把之后的视频放到这里面去
video = (FrameLayout) findViewById(R.id.video);
webView.setWebViewClient(new MyWebViewClient());
back_btn.setOnClickListener(this);
}

// 加载web

@SuppressLint("SetJavascriptEnabled")
private void LoadUrl() {
// TODO Auto-generated method stubs
// 设置WebView属性,能够执行Javascript脚本
webView.getSettings().setJavascriptEnabled(true);
webView.getSettings().setUseWideViewPort(true);

webView.setWebChromeClient(new DefaultWebChromeClient()); // 播放视频

webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
webView.getSettings().setLoadWithOverviewMode(true);
webView.loadUrl("http://www.iqiyi.com");


}

private class DefaultWebChromeClient extends WebChromeClient {
// 一个回调接口使用的主机应用程序通知当前页面的自定义视图已被撤职

// 进入全屏的时候
@SuppressLint("NewApi")
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {


try {

Log.e("WIDTHHHHHHH",String.valueOf(webView.getWidth()));
Log.e("LENGTHHHHHHH", String.valueOf(webView.getHeight()));
webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);

// 设置webView隐藏
webView.setVisibility(View.GONE);

back_btn.setVisibility(View.VISIBLE);

video.addView(view);
//video.bringToFront();
} catch (Exception e) {
// TODO Auto-generated catch block
Log.e("YYYYYYYYYY", e.getMessage());
e.printStackTrace();
}


// 横屏显示
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
// 设置全屏
setFullScreen();

customViewCallback = callback;


}

// 退出全屏的时候
@Override
public void onHideCustomView() {
if (customViewCallback != null) {
// 隐藏掉
customViewCallback.onCustomViewHidden();
}
// 用户当前的首选方向
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// 退出全屏
quitFullScreen();
// 设置WebView可见
webView.setVisibility(View.VISIBLE);
back_btn.setVisibility(View.GONE);
video.removeAllViews();
}

@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
}
}

/**
 * 设置全屏
 */
private void setFullScreen() {
// 设置全屏的相关属性,获取当前的屏幕状态,然后设置全屏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
// 全屏下的状态码:1098974464
// 窗口下的状态吗:1098973440
}

/**
 * 退出全屏
 */
private void quitFullScreen() {
// 声明当前屏幕状态的参数并获取
final WindowManager.LayoutParams attrs = getWindow().getAttributes();
attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().setAttributes(attrs);
getWindow()
.clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}

// 关联webview 类
class MyWebViewClient extends WebViewClient {

// 加载结束的时候
@Override
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
super.onPageFinished(view, url);
}

}

// 手机返回键监听
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
// 如果是全屏状态 按返回键则变成非全屏状态,否则执行返回操作
if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
quitFullScreen();
} else {
if (webView.canGoBack()) {
webView.goBack();
} else {
finish();
}
}

return true;
default:
break;
}
return false;
}

@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
webView.onPause();
}

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
switch (arg0.getId()) {
case R.id.back_btn:
if (customViewCallback != null) {
// 隐藏掉
customViewCallback.onCustomViewHidden();
}
// 用户当前的首选方向
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// 退出全屏
quitFullScreen();
// 设置WebView可见
webView.setVisibility(View.VISIBLE);
// expend_headerV.setVisibility(View.VISIBLE);
back_btn.setVisibility(View.GONE);
video.setVisibility(View.GONE);

break;
default:
break;
}
}

}

6 个解决方案

#1


求好心人。。。

#2


没有人知道吗?

#3


是否
webView.setWebViewClient(new MyWebViewClient());
back_btn.setOnClickListener(this);

移到onResume()里?,特别是第一句

#4


@swl82560397pq 不管用呀

#5


自己顶一个。

#6


播什么视频?
html5视频直接用WebChromeClient重载onShowCustomView和onHideCustomView来处理

推荐阅读
  •  项目地址https:github.comffmydreamWiCar界面做的很难看,美工方面实在不在行。重点是按钮触摸事件的处理,这里搬了RepeatListener项目代码,例 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 在一对一直播源码使用过程中,有时会出现软键盘切换闪屏问题,就是当切换表情的时候屏幕会跳动,因此要对一对一直播源码表情面板无缝切换进行优化。 ... [详细]
  • 1、概述首先和大家一起回顾一下Java消息服务,在我之前的博客《Java消息队列-JMS概述》中,我为大家分析了:然后在另一篇博客《Java消息队列-ActiveMq实战》中 ... [详细]
  • 资源:吊炸天!74款APP完整源码!android界面中点击输入框时弹出输入法如果输入框在底部会出现输入法遮挡输入内容的问题解决办法设置activity的windowsoftinpu ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • wpf+mvvm代码组织结构及实现方式
    本文介绍了wpf+mvvm代码组织结构的由来和实现方式。作者回顾了自己大学时期接触wpf开发和mvvm模式的经历,认为mvvm模式使得开发更加专注于业务且高效。与此同时,作者指出mvvm模式相较于mvc模式的优势。文章还提到了当没有mvvm时处理数据和UI交互的例子,以及前后端分离和组件化的概念。作者希望能够只关注原始数据结构,将数据交给UI自行改变,从而解放劳动力,避免加班。 ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • pc电脑如何投屏到电视?DLNA主要步骤通过DLNA连接,使用WindowsMediaPlayer的流媒体播放举例:电脑和电视机都是连接的 ... [详细]
author-avatar
宗小胖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有