Android利用AsyncTask异步类实现网页内容放大缩小
作者:lijiao 发布时间:2022-11-28 05:34:47
标签:AsyncTask,放大,缩小
本文实例为大家分享了AsyncTask异步类实现网页内容放大缩小的详细代码,供大家参考,具体内容如下
WebActivity.java:
package com.supermario.filemanager;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import org.apache.http.protocol.HTTP;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.widget.RelativeLayout;
import android.widget.ZoomControls;
public class WebActivity extends Activity {
//网页浏览器
private WebView webView;
//进度条布局和网页内容主体布局
private RelativeLayout loadingLayout,webLayout;
//放大缩小控制器
private ZoomControls zoomControls;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.web);
//初始化页面组件
webView = (WebView)findViewById(R.id.webkit);
loadingLayout = (RelativeLayout)findViewById(R.id.loadingLayout);
webLayout = (RelativeLayout)findViewById(R.id.weblayout);
zoomControls = (ZoomControls)findViewById(R.id.zoomControls);
WebSettings webSettings = webView.getSettings();
//设置可以使用js脚本
webSettings.setJavaScriptEnabled(true);
//执行异步进程
new MyAsyncTask().execute("");
}
private void reading(){
String filePath = getIntent().getStringExtra("filePath");
if (filePath != null) {
//读取文件
webView.loadData(readWebDataToStringFromPath(filePath, new FileReadOverBack() {
@Override
public void fileReadOver() {
}
}), "text/html", HTTP.UTF_8);
} else {
new AlertDialog.Builder(WebActivity.this).setTitle("出错了").setMessage("获取文件路径出错!").setPositiveButton("返回", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
WebActivity.this.finish();
}
});
}
}
//将网页数据读取到一个字符串变量中
private String readWebDataToStringFromPath(String path,final FileReadOverBack fileReadOverBack){
File file = new File(path);
StringBuffer stringBuffer = new StringBuffer();
try {
//读取文件内容
FileInputStream inputStream = new FileInputStream(file);
byte[] bytes = new byte[1024];
int readCount = 0;
while ((readCount = inputStream.read(bytes)) > 0) {
stringBuffer.append(new String(bytes, 0, readCount));
}
fileReadOverBack.fileReadOver();
} catch (FileNotFoundException e) {
return "文件不存在!";
} catch (IOException e) {
return "文件读取错误!";
}
return stringBuffer.toString();
}
interface FileReadOverBack{
void fileReadOver();
}
//异步处理类
class MyAsyncTask extends AsyncTask<String, String, String>{
//首先执行的函数
@Override
protected void onPreExecute() {
super.onPreExecute();
loadingLayout.setVisibility(View.VISIBLE);
webLayout.setVisibility(View.GONE);
}
//后台执行
@Override
protected String doInBackground(String... params) {
reading();
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
//设置载入进度条隐藏
loadingLayout.setVisibility(View.GONE);
//设置浏览器内容可见
webLayout.setVisibility(View.VISIBLE);
// 放大按钮
zoomControls.setOnZoomInClickListener(new View.OnClickListener() {
//将网页内容放大
@Override
public void onClick(View v) {
webView.zoomIn();
}
});
// 缩小按钮
zoomControls.setOnZoomOutClickListener(new View.OnClickListener() {
//将网页内容缩小
@Override
public void onClick(View v) {
webView.zoomOut();
}
});
}
}
}


猜你喜欢
- App Crash对于用户来讲是一种最糟糕的体验,它会导致流程中断、app口碑变差、app卸载、用户流失、订单流失等。相关数据显示,当And
- 本文基于jdk1.8进行分析。LinkedList和ArrayList都是常用的java集合。ArrayList是数组,Linkedlist
- 前言现在很多web应用,做过web项目的童鞋都知道,web结果由html+js+css组成,html结构都有一定的规范,数据动态交互可以通过
- 摘要:手把手教你使用 Java AWT 创建一个简易计算器。一、关于AWTAWT (抽象窗口工具包)是一个有助于构建 GUI 的 API (
- 通过下面代码在构造函数中调用方法 SetShadow();即可实现无边框窗体的阴影效果了需要添加命名空间 using System.Runt
- 如果需要实现跨服务器上传文件,就是将我们本地的文件上传到资源服务器上,比较好的办法就是通过ftp上传。这里是结合SpringMVC+ftp的
- 目录前言Lottie案例尝试1. 集成依赖2. 添加 LottieAnimationView 加载网络资源3. 加载本地资源4. 循环播放
- 本文实例为大家分享了Spring MVC多文件上传的具体代码,供大家参考,具体内容如下1)创建工程并导入JAR包2)创建多文件选择页面在 W
- 实现GridView的横向滚动效果如下图:具体实现的代码•1. 主界面布局代码:activity_main.xml<?xml vers
- 目标依赖<!-- poi工具类--> <dependency>
- 在前台请求数据的时候,sql语句一直都是打印到控制台的,有一个想法就是想让它打印到日志里,该如何做呢?见下面的mybatis配置文件:<
- 本文实例讲述了C#实现文件压缩与解压的方法。分享给大家供大家参考,具体如下:在企业开发过程中经常会遇到文件的压缩与解压,虽然网上很多流行的压
- 在本文中,笔者向大家介绍下Java中一个非常重要也非常有趣的特性,就是自动装箱与拆箱,并从源码中解读自动装箱与拆箱的原理,同时这种特性也留有
- Java Collection API提供了一些列的类和接口来帮助我们存储和管理对象集合。其实Java中的集合工作起来像是一个数组,不过集合
- 指示器时间轴在外卖、购物类的APP里会经常用到,效果大概就像下面这样,看了网上很多文章,大都是自己绘制,太麻烦,其实通过ListView就可
- Criteria的and和or进行联合查询DemoExample example=new DemoExample ();DemoExampl
- 本文实例为大家分享了Flutter实现顶部导航栏的具体代码,供大家参考,具体内容如下import 'package:flutter/
- 本文实例讲述了C++联合体union用法。分享给大家供大家参考。具体如下:我们应该按照C中的convention去使用union,这是我这篇
- 本文实例讲述了C#实现的字符串转MD5码函数。分享给大家供大家参考,具体如下:/*测试环境:WinXP SP3、Visual Studio
- 最大数给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个