Android,如何在另一个位图层上添加一个位图层,从列表中动态添加?

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) {

在我的应用程序中,我有一个列表适配器。每行左侧包括一个imageView,右侧包括两个TextView。为了获取图像,我正在使用库

我的getView()方法如下所示:

@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并用我的图像设置其源属性

哇,很好用