Android利用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();
  }
  });
 }
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android中AsyncTask异步任务使用详细实例(一)

    AsyncTask是Android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程. 使用AsyncTask最少要重写以下两个方法: 1.doInBackground(Params-) 后台执行,比较耗时的操作都可以放在这里.注意这里不能直接操作UI.此方法在后台线程执行,完成任务的主要工作,通常需要较长的时间.在执行过程中可以调用publicProgress(Progres

  • Android AsyncTask 后监听异步加载完毕的动作详解

    Android 使用AsyncTask 后监听异步加载完毕的动作 AsyncTask 的使用方法网上有很多例子,使用起来也非常的方便.这里就不详细说具体的使用方法了,同学可以Google 一下,很多. 场景模拟 当我们在加载一个列表的时候,比如GridView ,这时候我们考虑到不阻塞UI的做法,一般会使用线程Thread .Timer 或者使用AsyncTask ,而这些操作都是在在后台另外开一个线程给我们找数据,具体得到的数据需要使用Handler 去更新UI,AsyncTask 也是一样使

  • Android 中糟糕的AsyncTask

    AsyncTask是一个很常用的API,尤其异步处理数据并将数据应用到视图的操作场合.其实AsyncTask并不是那么好,甚至有些糟糕.本文我会讲AsyncTask会引起哪些问题,如何修复这些问题,并且关于AsyncTask的一些替代方案. AsyncTask 从Android API 3(1.5 Cupcake)开始,AsyncTask被引入用来帮助开发者更简单地管理线程.实际上在Android 1.0和1.1也是有类似的实现,那就是UserTask.UserTask和AsyncTask有着相

  • Android中AsyncTask与handler用法实例分析

    本文实例讲述了Android中AsyncTask与handler用法.分享给大家供大家参考,具体如下: 首先,我们得明确下一个概念,什么是UI线程.顾名思义,ui线程就是管理着用户界面的那个线程! android的ui线程操作并不是安全的,并且和用户直接进行界面交互的操作都必须在ui线程中进行才可以.这种模式叫做单线程模式. 我们在单线程模式下编程一定要注意:不要阻塞ui线程.确保只在ui线程中访问ui组件 当我们要执行一个复杂耗时的算法并且最终要将计算结果反映到ui上时,我们会发现,我们根本没

  • Android中通过AsyncTask类来制作炫酷进度条的实例教程

    AsyncTask (API level 3,所以几乎所有目前在市面上流通的 Android 版本皆可使用) 是除 Thread 外的另一种选择,Android 团队鼓励主执行绪(UI thread) 专注于操作 & 画面的流畅呈现, 其余工作 (如网络资料传输.档案/磁碟/资料存取) 最好都在背景执行: Thread 通常要搭配 Handler 使用,而 AsyncTask 用意在简化背景执行 thread 程序码的撰写. 如果您预期要执行的工作能在几秒内完成,就可以选择使用 AsyncTas

  • Android 中使用 AsyncTask 异步读取网络图片

     1.新建Android工程AsyncLoadPicture 新建布局文件activity_main.xml主界面为一个GridView,还有其子项布局文件gridview_item.xml 2.功能主界面MainActivity.java,主代码如下 package com.example.asyncloadpicture; import java.util.ArrayList; import android.app.Activity; import android.content.Conte

  • 详解Android App中的AsyncTask异步任务执行方式

    基本概念 AsyncTask:异步任务,从字面上来说,就是在我们的UI主线程运行的时候,异步的完成一些操作.AsyncTask允许我们的执行一个异步的任务在后台.我们可以将耗时的操作放在异步任务当中来执行,并随时将任务执行的结果返回给我们的UI线程来更新我们的UI控件.通过AsyncTask我们可以轻松的解决多线程之间的通信问题. 怎么来理解AsyncTask呢?通俗一点来说,AsyncTask就相当于Android给我们提供了一个多线程编程的一个框架,其介于Thread和Handler之间,我

  • 详解Android中AsyncTask机制

    在Android当中,提供了两种方式来解决线程直接的通信问题,一种是通过Handler的机制,还有一种就是今天要详细讲解的 AsyncTask 机制. AsyncTask       AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程. 怎么来理解AsyncTask呢?通俗一点来说,AsyncTask就相当于Android给我们提供了一个多线

  • Android使用AsyncTask实现多线程下载的方法

    本文实例讲述了Android使用AsyncTask实现多线程下载的方法.分享给大家供大家参考,具体如下: public class MainActivity extends Activity implements OnClickListener { private Button btn1, btn2, btn3; private ProgressBar progressBar1, progressBar2, progressBar3; private ImageView img1, img2,

  • 详解Android中AsyncTask的使用方法

    在Android中实现异步任务机制有两种方式,Handler和AsyncTask. Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更新,这种方式对于整个过程的控制比较精细,但也是有缺点的,例如代码相对臃肿,在多个任务同时执行时,不易对线程进行精确的控制. 为了简化操作,Android1.5提供了工具类android.os.AsyncTask,它使创建异步任务变得更加简单,不再需要编写任务线程和Handler实例即可完成相同的任务

  • Android通过Handler与AsyncTask两种方式动态更新ListView(附源码)

    本文实例讲述了Android通过Handler与AsyncTask两种方式动态更新ListView的方法.分享给大家供大家参考,具体如下: 有时候我们需要修改已经生成的列表,添加或者修改数据,notifyDataSetChanged()可以在修改适配器绑定的数组后,不用重新刷新Activity,通知Activity更新ListView.今天的例子就是通过Handler AsyncTask两种方式来动态更新ListView. 布局main.xml: <?xml version="1.0&qu

随机推荐