TextView 显示本地图片,或访问网络图片资源
package com.hilary;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.text.Html;
import android.text.Html.ImageGetter;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import com.hilary.utils.AsyncImageLoader;
public class Main extends Activity {
Button btn2;
ImageView imge;
Thread thread = null;
Runnable runnable = null;
TextView textView = null;
Drawable dra = null;
private AsyncImageLoader asyncImageLoader;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
asyncImageLoader = AsyncImageLoader.getAsyncImageLoader();
btn2 = (Button) findViewById(R.id.btn2);
textView = (TextView) findViewById(R.id.show_tv);
btn2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Handler handler = new Handler();
// handler.post(runable);
textView.setText(Html.fromHtml( _readFile("/sdcard/test2.txt"), imgGetter, null));
}
});
}
public String _readFile(String str) {
StringBuffer sb = new StringBuffer();
File file = new File(str);
try {
FileReader is = new FileReader(file);
while (is.ready()) {
int c = is.read();
sb.append((char) c);
}
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
ImageGetter imgGetter = new Html.ImageGetter() {
@Override
public Drawable getDrawable(String source) {
System.out.println("***" + source);
//异步加载图片
// Drawable drawable = asyncImageLoader.loadDrawable(
// source, new ImageCallback() {
//
// @Override
// public void imageLoaded(Drawable imageDrawable,
// String imageUrl) {
// if (imageDrawable == null) {
// } else {
// imageDrawable.setBounds(0, 0, imageDrawable.getIntrinsicWidth(), imageDrawable
// .getIntrinsicHeight());
// }
// dra = imageDrawable;
// }
// });
// if(source.equals("1")){
// drawable = Main.this.getResources().getDrawable(R.drawable.aa);
// } else if (source.equals("2")){
// drawable = Main.this.getResources().getDrawable(R.drawable.b);
// } else {
// drawable = Main.this.getResources().getDrawable(R.drawable.icon);
// }
URL url;
Drawable drawable = null;
try {
url = new URL(source);
drawable = Drawable.createFromStream(url.openStream(), "");
} catch (Exception e) {
return null;
}
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable
.getIntrinsicHeight());
return drawable;
}
};
}
分享到:
相关推荐
总之,要在TextView中加载网络图片,我们需要处理HTML解析、网络请求、图片显示等多个环节。合理选择和使用工具,结合Android原生方法和第三方库,可以实现高效、稳定的图片加载效果。通过实践和优化,我们可以让...
总结,针对Android TextView实现HTML图片显示,可以选择WebView方式,它适用于复杂的HTML渲染,而如果只是简单展示图片,使用`Html.fromHtml()`配合自定义`ImageGetter`会更轻量级。两种方法都能实现图片点击的交互...
为了显示网络图片,我们需要自定义一个 `ImageGetter` 类,并重写其 `getDrawable()` 方法。`getDrawable()` 方法会在解析到 `<img>` 标签时被调用,用于获取图片并返回一个 `Drawable` 对象。 ```java class ...
对于网络图片,确保在使用后释放资源,避免内存泄漏。可以使用`Glide`、`Picasso`等图片加载库,它们内置了缓存和内存管理机制。 8. **安全问题** 当从网络接收HTML内容时,务必注意安全问题,防止XSS(跨站脚本...
若要显示网络图片,你需要自定义`ImageGetter`接口来下载并加载图片,如下: ```java textView.setMovementMethod(LinkMovementMethod.getInstance()); textView.setText(Html.fromHtml(htmlString, new ...
如果你需要更复杂的功能,如动态加载网络图片,或者对图片进行自定义布局,你可以选择继承`TextView`并实现自己的逻辑。在自定义View中,你可以添加`ImageView`作为子视图,并根据需求调整布局和加载图片。 以上四...
然而,TextView不仅可以显示纯文本,还可以通过一些技巧来展示HTML内容,包括其中的图片资源。本实例将详细讲解如何在TextView中加载并显示HTML中的图片,使你的应用具有更丰富的展示效果。 首先,我们需要明白...
- 当处理网络图片时,需要额外的网络权限和图片下载/缓存机制。 综上所述,`TextView`加载HTML图片是Android开发中实现图文混排的一种常见方式,通过自定义`ImageGetter`、使用第三方库等方式,可以满足各种复杂的...
HtmlTextView是解决Android TextView显示HTML内容的一个尝试,它在早期版本的Android系统中可能表现出色,但在Android 7.0及更高版本可能需要额外的适配工作。开发者在选择使用时,应该评估其兼容性,考虑使用...
本示例“安卓Andriod源码——textView显示图片的例子_TextImage.zip”将帮助开发者理解如何在TextView中嵌入图片,使得应用的用户界面更加丰富多彩。 一、TextView与显示图片的基本概念 TextView作为Android SDK中...
同时,对于网络图片,要考虑网络状态和图片大小,避免对用户体验造成负面影响。 此外,Android API 24及以上版本提供了`Html.fromHtml(String source, int flags)`的新方法,其中`flags`参数可以指定一些行为,例如...
4. **图片加载库**:在实际开发中,为了提高用户体验和节省内存,我们通常会使用图片加载库如Glide、Picasso或Fresco来加载网络图片。这些库能够自动处理缓存、图片缩放等问题,避免了因加载大图而导致的内存溢出。 ...
如果是网络图片,需要处理网络请求和缓存策略,以优化用户体验和减少不必要的网络负载。 5. 性能优化: `TextView`显示HTML内容可能会影响性能,特别是当HTML内容较大或图片数量较多时。可以通过以下方式优化: -...
总结起来,这个解决方案利用了`TextView`的`fromHtml()`方法和自定义`ImageGetter`来实现HTML文本和网络图片在`TextView`中的异步加载。这种技术在显示富文本内容时非常实用,比如在新闻、博客或邮件应用中。
3. 图片:通过`ImageSpan`插入图片资源或网络图片。 ```java Drawable drawable = ContextCompat.getDrawable(this, R.drawable.ic_launcher_background); CharSequence textWithImage = "文本 " + new ImageSpan...
从网络加载图片显示到listview上,主函数布局是一个ListView item布局是TextView和ImageView 数量的多少视情况而定 再写一个网络请求数据的类 最后面有代码: ”urlConnection 请求数据类的封装“ 类名一定要一样...
5. 预处理图片,如加载网络图片并缓存。 总的来说,Android开发中在TextView和EditText中插入图片是一项常见的需求,通过封装好的工具类可以使得这一过程变得简单易行。合理利用这些工具,能够帮助开发者更专注于...
通过以上方式,我们可以利用 `Html.fromHtml()` 结合自定义 `ImageGetter` 实现加载网络图片的功能,从而在TextView中展示富文本内容,提升用户体验。在实际项目中,根据需求可以进一步定制化 `ImageGetter`,比如...