You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
git-test3/app/src/main/java/org/xing/android/SimpleHelpActivity.java

255 lines
8.8 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package org.xing.android;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceResponse;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.umeng.analytics.MobclickAgent;
import java.io.ByteArrayInputStream;
public class SimpleHelpActivity extends AppCompatActivity {
private WebView helpWeb;
private View videoView;
private FrameLayout videoContainerView;
LinearLayout toolBar;
private ProgressBar progressBar;
private TextView titleText;
private WebChromeClient chromeClient;
/**
* 设置全屏
*/
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);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_simple_help);
videoView = null;
videoContainerView = (FrameLayout) findViewById(R.id.video);
toolBar = (LinearLayout) findViewById(R.id.toolBar);
progressBar = (ProgressBar) findViewById(R.id.webProgress);
titleText = (TextView) findViewById(R.id.help_title);
Button closeButton = (Button) findViewById(R.id.help_close);
closeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
helpWeb = (WebView) this.findViewById(R.id.simple_help);
helpWeb.setBackgroundColor(0);
WebSettings settings = helpWeb.getSettings();
settings.setJavaScriptEnabled(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
settings.setDatabaseEnabled(true);
settings.setAppCacheEnabled(true);
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
settings.setPluginState(WebSettings.PluginState.ON);
settings.setAllowFileAccess(true);
settings.setLoadWithOverviewMode(false);
settings.setDomStorageEnabled(true);
chromeClient = new WebChromeClient() {
private CustomViewCallback callBack;
// 播放网络视频时全屏会被调用的方法
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
toolBar.setVisibility(View.INVISIBLE);
helpWeb.setVisibility(View.INVISIBLE);
// 如果一个视图已经存在,那么立刻终止并新建一个
if (videoView != null) {
callback.onCustomViewHidden();
return;
}
videoContainerView.addView(view);
videoView = view;
callBack = callback;
videoContainerView.setVisibility(View.VISIBLE);
setFullScreen();
}
// 视频播放退出全屏会被调用的
@Override
public void onHideCustomView() {
if (videoView == null)// 不是全屏播放状态
return;
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
videoView.setVisibility(View.GONE);
videoContainerView.removeView(videoView);
videoView = null;
videoContainerView.setVisibility(View.GONE);
callBack.onCustomViewHidden();
toolBar.setVisibility(View.VISIBLE);
helpWeb.setVisibility(View.VISIBLE);
quitFullScreen();
}
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress == 100) {
progressBar.setVisibility(View.GONE);
} else {
if (View.INVISIBLE == progressBar.getVisibility()) {
progressBar.setVisibility(View.VISIBLE);
titleText.setText("页面加载中...");
}
progressBar.setProgress(newProgress);
}
super.onProgressChanged(view, newProgress);
}
};
helpWeb.setWebChromeClient(chromeClient);
helpWeb.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
WebView.HitTestResult hitTestResult = view.getHitTestResult();
if (!TextUtils.isEmpty(url) && hitTestResult == null) {
return;
}
titleText.setText(view.getTitle());
}
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
if (url.startsWith("http") || url.startsWith("https")
|| url.startsWith("javascript") || url.startsWith("file")) {
return super.shouldInterceptRequest(view, url);
} else {
String tips = "启动外部应用...";
try {
Intent in = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(in);
} catch (ActivityNotFoundException ex) {
tips = "启动外部应用失败,请安装最新版应用。";
}
return new WebResourceResponse("text/plain", "utf-8", new ByteArrayInputStream(tips.getBytes()));
}
}
});
helpWeb.setOnTouchListener(new View.OnTouchListener() {
private float x1 = 0;
private float x2 = 0;
private float y1 = 0;
private float y2 = 0;
@Override
public boolean onTouch(View v, MotionEvent event) {
//继承了Activity的onTouchEvent方法直接监听点击事件
if (event.getAction() == MotionEvent.ACTION_DOWN) {
//当手指按下的时候
x1 = event.getX();
y1 = event.getY();
}
if (event.getAction() == MotionEvent.ACTION_UP) {
//当手指离开的时候
x2 = event.getX();
y2 = event.getY();
if (y1 - y2 > 50) {
toolBar.setVisibility(View.GONE);
} else if (y2 - y1 > 50) {
toolBar.setVisibility(View.VISIBLE);
}
}
return false;
}
});
String url = getIntent().getStringExtra("url");
helpWeb.loadUrl(url);
}
@Override
public void onResume() {
super.onResume();
MobclickAgent.onResume(this);
helpWeb.onResume();
}
@Override
public void onPause() {
super.onPause();
MobclickAgent.onPause(this);
helpWeb.onPause();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && helpWeb.canGoBack()) {
helpWeb.goBack();// 返回前一个页面
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public void onBackPressed() {
if (videoView == null) {
super.onBackPressed();
} else {
chromeClient.onHideCustomView();
}
}
}