Dans mon application, j'ai un adaptateur de liste. chaque ligne comprend un imageView dans la gauche et deux textViews dans la droite. Pour obtenir des images, j'utilise la bibliothèque Universal-Image-Loader.Android, Comment ajouter un calque bitmap sur un autre calque bitmap, dynamiquement à partir d'une liste?
ma méthode getView() est la suivante:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = myInflater.inflate(R.layout.list_news_adapter, null);
holder = new ViewHolder();
holder.ivIcon = (ImageView) convertView.findViewById(R.id.list_news_icon);
holder.tvTitle = (TextView) convertView.findViewById(R.id.list_news_title);
holder.tvDate = (TextView) convertView.findViewById(R.id.list_news_date);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.tvTitle.setText(video.getTitle().get(position));
holder.tvDate.setText(localTime.get(position));
// Load and display image
String imageUrl = (video.getDefaultImage128x96().get(position));
imageUrl = imageUrl.trim().replaceAll(" ", "%20");
imageLoader.displayImage(imageUrl, holder.ivIcon, options);
holder.ivIcon.buildDrawingCache();
Bitmap image = holder.ivIcon.getDrawingCache();
if(image != null) {
image = putOverlay(image, holder.ivIcon.getWidth(), holder.ivIcon.getHeight());
holder.ivIcon.setImageBitmap(image);
holder.ivIcon.destroyDrawingCache();
}
return convertView;
}
dans le code ci-dessous, je donne la liste des URL à cette libray à télécharger dans différents threads.
// Load and display image
String imageUrl = (video.getDefaultImage128x96().get(position));
imageUrl = imageUrl.trim().replaceAll(" ", "%20");
imageLoader.displayImage(imageUrl, holder.ivIcon, options);
après dans le code suivant, je suis obtenir l'image actuelle de imageView (qui est téléchargé) et demander une autre méthode pour ajouter une couche au-dessus de cette image.
holder.ivIcon.buildDrawingCache();
Bitmap image = holder.ivIcon.getDrawingCache();
if(image != null) {
image = putOverlay(image, holder.ivIcon.getWidth(), holder.ivIcon.getHeight());
holder.ivIcon.setImageBitmap(image);
holder.ivIcon.destroyDrawingCache();
}
méthode putOverlay() est comme ceci:
public Bitmap putOverlay(Bitmap bmp, int width, int height) {
Bitmap overLay = BitmapFactory.decodeResource(context.getResources(), R.drawable.video_overlay);
Bitmap bmBackground = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), bmp.getConfig());
Canvas canvas = new Canvas(bmBackground);
Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG);
canvas.drawBitmap(bmp, 0, 0, paint);
canvas.drawBitmap(overLay, width*3/8, height*3/8, paint);
return bmBackground;
}
Il faisait partie fonctionnelle. Qu'en est-il du résultat! La bibliothèque Universal Image Loader utilise une image prédéfinie tant que l'image principale est en cours de téléchargement. mon code peut fusionner ces deux couches. Cependant, lorsque l'image principale est téléchargée, elle remplace l'image précédente alors que je m'attends à ce que l'image de superposition se trouve au-dessus de cette image. Mais, après défilement de l'écran, je peux voir mon image ajoutée (la plupart des images ont et certains d'entre eux n'ont pas mon image ajoutée).
toute suggestion/commentaire serait appréciée.