package com.example.htmltest;
import java.net.URL;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.text.Html;
import android.text.Html.ImageGetter;
import android.text.method.LinkMovementMethod;
import android.text.method.ScrollingMovementMethod;
import android.util.DisplayMetrics;
import android.widget.TextView;
public class MainActivity extends Activity
{
private String html;
private TextView textView;
public static DisplayMetrics displayMetrics;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
displayMetrics=getApplicationContext().getResources().getDisplayMetrics();
html="<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0\"><meta name=\"apple-mobile-web-app-capable\" content=\"yes\"><meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black\"><meta content=\"telephone=no\" name=\"format-detection\"></head><P><FONT size=5>【一汽-大众诸暨元通】 —— 全心,全服务</FONT><SPAN style=\"COLOR: #000000\"><!--StartFragment --></P><DIV><FONT size=5> 9月27-29日,诸暨元通一汽-大众全系现车秋季城市广场金秋温情大酬宾啦!对一汽-大众大众汽车感兴趣的朋友亦可带着家人,邀上朋友,结伴来城市广场一汽-大众展位,我们期待您的光临</FONT><FONT size=5>!</FONT></DIV><DIV><FONT size=5>展位位置:</FONT></DIV><DIV><IMG style=\"WIDTH: 653px; HEIGHT: 388px\" height=673 src=\"/pro/iXs_Editor/uploadfile/20130925102136428.jpg\" width=1117 border=0></DIV><DIV> </DIV><DIV><FONT size=5>梦想随行,国庆献礼,诸暨元通一汽大众金秋温情大酬宾</FONT></DIV><DIV><FONT size=5></FONT> </DIV><DIV><IMG src=\"/pro/iXs_Editor/uploadfile/20130925102251145.jpg\" border=0></DIV><DIV><FONT size=4></FONT> </DIV><DIV><FONT size=4>愿我们真心优质的服务,真挚诚恳的让利,让您尽享购车之旅的那份愉悦与享受!<BR>我们的使命是让更多的人拥有一汽-大众品牌轿车!<BR></FONT><FONT size=4><STRONG><FONT color=#ff0000>汽车之路,元通相伴,汽车生活,元通服务<BR></FONT></STRONG>享受更多优惠,尽在诸暨元通一汽-大众4S店(原海越汽车)!<BR>一汽-大众授权经销商:诸暨元通汽车有限公司<BR>4S店地址:诸暨市环城西路167号(老办证中心旁)<BR>销售热线:0575-87105555<BR>预约热线:0575-87105501<BR>24小时救援热线:13857521919</FONT></DIV><P align=left><IMG src=\"http://car.zhuji.net/pro/iXs_Editor/uploadfile/20130903090510258.jpg\" border=0></P><DIV> </DIV></SPAN>";
textView=(TextView)findViewById(R.id.text);
initContent(textView, html);
}
/**
* 加载html数据
* @param tv
* @param s
*/
private void initContent(TextView tv, String s)
{
tv.setMovementMethod(ScrollingMovementMethod.getInstance());// 设置可滚动
tv.setMovementMethod(LinkMovementMethod.getInstance());//设置超链接可以打开网页
tv.setText(Html.fromHtml(s, new URLImageParser(textView, getApplicationContext()), null));
}
//这里面的resource就是fromhtml函数的第一个参数里面的含有的url
//无法加载大图片
// ImageGetter imgGetter = new Html.ImageGetter()
// {
// public Drawable getDrawable(String source)
// {
// Drawable drawable = null;
// URL url;
// try
// {
// if (!source.contains("http"))
// {
// url = new URL("http://car.zhuji.net" + source);
// }
// else
// {
// url = new URL(source);
// }
// drawable = Drawable.createFromStream(url.openStream(), ""); // 获取网路图片
// }
// catch (Exception e)
// {
// return null;
// }
// drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),
// drawable.getIntrinsicHeight());
// return drawable;
// }
// };
}
package com.example.htmltest;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import android.content.Context;
import android.content.res.Resources.NotFoundException;
import android.graphics.Canvas;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.provider.SyncStateContract.Constants;
import android.text.Html.ImageGetter;
import android.util.DisplayMetrics;
import android.widget.TextView;
public class URLImageParser implements ImageGetter {
Context c;
TextView tv_image;
private Drawable mDefaultDrawable;
public URLImageParser(TextView t, Context c) {
this.tv_image = t;
this.c = c;
try {
mDefaultDrawable = c.getResources().getDrawable(
R.drawable.ic_launcher);
// Log.i("-->", "执行");
} catch (NotFoundException e) {
mDefaultDrawable = null;
// Log.i("-->", "执行1");
e.printStackTrace();
}
}
@Override
public Drawable getDrawable(String source) {
if (!source.contains("http"))
{
source="http://car.zhuji.net" + source;
}
// TODO Auto-generated method stub
URLDrawable urlDrawable = new URLDrawable();
// main3.b.add(source);
try {
/*
* mDefaultDrawable.setBounds(0, 0, 0 +
* mDefaultDrawable.getIntrinsicWidth(),
* mDefaultDrawable.getIntrinsicHeight());
*/
urlDrawable.drawable = mDefaultDrawable;
URLImageParser.this.tv_image.invalidate();
} catch (Exception e) {
e.printStackTrace();
}
/*
* urlDrawable.setBounds(0, 0, 0 + mDefaultDrawable.getIntrinsicWidth(),
* mDefaultDrawable.getIntrinsicHeight());
*/
ImageGetterAsyncTask asyncTask = new ImageGetterAsyncTask(urlDrawable);
asyncTask.execute(source);
return urlDrawable;
}
public class ImageGetterAsyncTask extends AsyncTask<String, Void, Drawable> {
URLDrawable urlDrawable;
public ImageGetterAsyncTask(URLDrawable d) {
this.urlDrawable = d;
}
@Override
protected void onPostExecute(Drawable result) {
if (result != null) {
urlDrawable.drawable = result;
URLImageParser.this.tv_image.invalidate();
// Log.i("-->", "执行3");
}
}
@Override
protected void onPreExecute() {
urlDrawable.setBounds(0, 0,
0 + mDefaultDrawable.getIntrinsicWidth(),
0 + mDefaultDrawable.getIntrinsicHeight());
urlDrawable.drawable = mDefaultDrawable;
URLImageParser.this.tv_image.invalidate();
super.onPreExecute();
}
@Override
protected Drawable doInBackground(String... params) {
// TODO Auto-generated method stub
String source = params[0];// 图片URL
return fetchDrawable(source);
}
// 获取URL的Drawable对象
public Drawable fetchDrawable(String urlString) {
BitmapDrawable bitmap = null;
Drawable drawable = null;
try {
InputStream is = fetch(urlString);
bitmap = (BitmapDrawable) BitmapDrawable.createFromStream(is,"src");
drawable = bitmap;
// drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),
// drawable.getIntrinsicHeight());
DisplayMetrics metrics = /*Constants.metrics*/MainActivity.displayMetrics;
if(bitmap.getBitmap().getWidth()>metrics.widthPixels/2||bitmap.getBitmap().getHeight()>metrics.heightPixels/6)
//进行等比例缩放程序
// drawable.setBounds(0, 0, metrics.widthPixels/2, ((int)(metrics.widthPixels/2*bitmap.getBitmap().getHeight()/bitmap.getBitmap().getWidth())));
drawable.setBounds(0, 0, metrics.heightPixels/6*bitmap.getBitmap().getWidth()/bitmap.getBitmap().getHeight(), metrics.heightPixels/6);
else
drawable.setBounds(0,0,bitmap.getBitmap().getWidth(),bitmap.getBitmap().getHeight());
} catch (Exception e) {
return null;
}
return drawable;
}
private InputStream fetch(String urlString)
throws MalformedURLException, IOException {
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet request = new HttpGet(urlString);
HttpResponse response = httpClient.execute(request);
return response.getEntity().getContent();
}
}
class URLDrawable extends BitmapDrawable {
protected Drawable drawable;
@Override
public void draw(Canvas canvas) {
if (drawable != null) {
drawable.draw(canvas);
}
}
}
}