Android,如何在另一个位图层上添加一个位图层,从列表中动态添加?
在我的应用程序中,我有一个列表适配器。每行左侧包括一个imageView,右侧包括两个TextView。为了获取图像,我正在使用库 我的getView()方法如下所示:Android,如何在另一个位图层上添加一个位图层,从列表中动态添加?,android,listview,bitmap,overlay,bit-manipulation,Android,Listview,Bitmap,Overlay,Bit Manipulation,在我的应用程序中,我有一个列表适配器。每行左侧包括一个imageView,右侧包括两个TextView。为了获取图像,我正在使用库 我的getView()方法如下所示: @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView == null) {
@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;
}
在下面的代码中,我给出了要在不同线程中下载到该库的URL列表
// Load and display image
String imageUrl = (video.getDefaultImage128x96().get(position));
imageUrl = imageUrl.trim().replaceAll(" ", "%20");
imageLoader.displayImage(imageUrl, holder.ivIcon, options);
在下面的代码中,我将获得imageView的当前图像(已下载),并要求其他方法在该图像的顶部添加一层
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();
}
putOverlay()方法如下所示:
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;
}
这是功能部分。结果如何!
只要主映像正在下载,通用映像加载程序库就会使用预定义映像。我的代码可以合并这两个层。
但是,当下载主图像时,它会覆盖以前的图像,而我希望我的覆盖图像位于此图像的顶部。
但是,在屏幕滚动之后,我可以看到我添加的图像(大多数图像都有,有些图像没有我添加的图像)。
如有任何建议/意见,将不胜感激 解决方案比我想的要简单 首先我去掉了那些
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();
}
和我的列表适配器中的putOverlay()
方法,然后在行的XML文件(list\u news\u adapter
)中,我添加了另一个imageView并用我的图像设置其源属性
哇,很好用