önbellek görüntüsü Android Programming uygulamasında yeni. Şu anda ImageGetter ve Html.fromHtml() kullanarak HTML içeriğini TextView'da görüntülemek için bir uygulama geliştirdim. Resmi çevrimdışı görüntüleyebilmem için TextView'daki içeriği ve görüntüyü önbelleğe almam mümkün mü?Android: Textview imageGetter, html içeriğini ve görüntüsünü görüntüler. ImageGetter
cevap
Bazı günler önce aynı şeyi yapıyordum. ImageGetter kullanarak metin görünümünde html
görüntüleniyordu. Ama önerilen sonucu vermiyordu. Öyleyse Jsoup libaray'ı kullandım ve elemanları ayıklayıp Textvew
'da görüntüledim ve img
etiketi geldiğinde görüntüyü UIL evrensel görüntü libarary kullanarak Imageview
görüntülemekteyim. Peki bu libaray, görüntüleri önbelleğe alma seçeneğine sahiptir. Sadece html dizgisini önbelleğe almanız ve ardından jsoup mizanpajının yanı sıra UIL işlenecek olan ile birlikte sınıflandırma sınıfına aktarmanız gerekir.
public class PostContentHandler {
Context context;
String content;
LinearLayout linearLayout;
public PostContentHandler(Context context, String content , LinearLayout linearLayout){
this.context=context;
this.content=content;
this.linearLayout=linearLayout;
}
public void setContentToView(){
List<String> p = new ArrayList<>();
List<String> src = new ArrayList<>();
Document doc = Jsoup.parse(content);
Elements elements = doc.getAllElements();
for(Element element :elements){
Tag tag = element.tag();
if(tag.getName().matches("h[1-6]{1}")){
String heading = element.select(tag.getName().toString()).text();
TextView textView = new TextView(context);
textView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
textView.setTextSize(20);
textView.setText(heading);
textView.setPadding(5, 0, 5, 0);
textView.setTextColor(R.color.black);
linearLayout.addView(textView);
}
if(tag.getName().equalsIgnoreCase("p")){
element.select("img").remove();
String body= element.html();
TextView textView = new TextView(context);
textView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
textView.setText(Html.fromHtml(body));
textView.setTextColor(R.color.black);
textView.setPadding(10,0,10,0);
linearLayout.addView(textView);
p.add(body);
}
if (tag.getName().equalsIgnoreCase("img")){
String url = element.select("img").attr("src");
final ImageView imageView = new ImageView(context);
imageView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.displayImage(url, imageView, new SimpleImageLoadingListener() {
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
super.onLoadingComplete(imageUri, view, loadedImage);
int height=loadedImage.getHeight();
imageView.getLayoutParams().height=getScreenWidth();
imageView.setAdjustViewBounds(true);
imageView.requestLayout();
}
@Override
public void onLoadingStarted(String imageUri, View view) {
super.onLoadingStarted(imageUri, view);
}
});
linearLayout.addView(imageView);
src.add(url);
}
}
}
public static int getScreenWidth() {
return Resources.getSystem().getDisplayMetrics().widthPixels;
}
}
İşte kodum. Ben deneyin ve hata ayıklama, kod onLoadingFailed() için gitti gösterir ve onLoadingComplete() gitmez. Neden olduğuna dair hiçbir fikrim yok.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
linearLayout = (LinearLayout)findViewById(R.id.linearLayout1);
DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
.cacheOnDisc(true).cacheInMemory(true)
.imageScaleType(ImageScaleType.EXACTLY)
.displayer(new FadeInBitmapDisplayer(100)).build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
getApplicationContext())
.defaultDisplayImageOptions(defaultOptions)
.memoryCache(new WeakMemoryCache())
.discCacheSize(10 * 1024 * 1024).build();
ImageLoader.getInstance().init(config);
setContentToView();
}
public void setContentToView(){
List<String> p = new ArrayList<>();
List<String> src = new ArrayList<>();
Document doc = Jsoup.parse(content);
Elements elements = doc.getAllElements();
for(Element element :elements){
Tag tag = element.tag();
if(tag.getName().matches("h[1-6]{1}")){
String heading = element.select(tag.getName().toString()).text();
TextView textView = new TextView(this);
textView.setText(Html.fromHtml(heading));
textView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
linearLayout.addView(textView);
}
if(tag.getName().equalsIgnoreCase("p")){
element.select("img").remove();
String body= element.html();
TextView textView = new TextView(this);
textView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
textView.setText(Html.fromHtml(body));
this.linearLayout.addView(textView);
p.add(body);
}
if (tag.getName().equalsIgnoreCase("img")){
String url = element.select("img").attr("src");
final ImageView imageView = new ImageView(this);
imageView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.displayImage(url, imageView, new SimpleImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
super.onLoadingStarted(imageUri, view);
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
super.onLoadingComplete(imageUri, view, loadedImage);
int height=loadedImage.getHeight();
imageView.getLayoutParams().height=getScreenWidth();
imageView.setAdjustViewBounds(true);
imageView.requestLayout();
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
super.onLoadingCancelled(imageUri, view);
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
super.onLoadingFailed(imageUri, view, failReason);
}
});
linearLayout.addView(imageView);
src.add(url);
}
}
}
public static int getScreenWidth() {
return Resources.getSystem().getDisplayMetrics().widthPixels;
}
@Zeeshan Shabbir İşte benim kodum –
Bu işlevi nasıl arayabilirim, html dizesini bu işleve nasıl iletebilirim? Maalesef Android Programlamada yeniyim. –
Görüntüyü görüntülemek için görüntüyü kullanın. not textview –
Geri bildiriminiz için teşekkür ederiz. Sonunda kodunuzu çözüyorum. Ancak, imageLoader.displayImage() satırında sözdizimi hatası var. Bu hata neden oldu: java.lang.IllegalStateException: ImageLoader, –