Android的,如何通过另一个位图层添加一个位图层,动态地从名单? [英] Android, How to add a bitmap layer over another bitmap layer, dynamically from list?

查看:239
本文介绍了Android的,如何通过另一个位图层添加一个位图层,动态地从名单?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的申请,我有一个列表适配器。每行包括左侧有一个ImageView的和右两textViews。为了获取图像,我使用通用 - 图像 - 装载机库。

In my application, I have a list adapter. each row includes an imageView in left and two textViews in right. For getting images I'm using Universal-Image-Loader library.

我getView()方法是这样的:

my getView() method is this:

@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;
    }

在以下code,我给的URL列表到libray要在不同的线程下载。

in following code, I'm giving list of URLs to that libray to be downloaded in different threads.

// Load and display image
String imageUrl = (video.getDefaultImage128x96().get(position));
imageUrl = imageUrl.trim().replaceAll(" ", "%20");
imageLoader.displayImage(imageUrl, holder.ivIcon, options);

ImageView的(这是下载)的,在以下code,我得到当前的图像后,并要求其他的方法来对这个图像的顶部添加一个图层。

after that in following code, i'm getting current image of imageView (which is downloaded) and ask other method to add a layer on top of this 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();
}

putOverlay()方法是这样的:

putOverlay() method is like this:

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;
    }

这是功能性的一部分。怎么样的结果!
通用图像装载机库只要主图像正在下载使用predefined形象。我的code可以合并这两层。

It was functional part. What about result! Universal Image Loader library uses predefined image as long as main image is under downloading. my code can merge this two layers.

然而,当主图像被下载它将覆盖previous形象,而我希望我的叠加图像坐在这个图像的顶部。

However, when main image is downloaded it overrides previous image while i expect my overlay image sits on top of this image.

不过,屏幕的滚动后,我可以看到我添加的图像(大多数图像都有,其中一些没有我添加的图片)。

But, after scroll of screen, i can see my added image (most of images has and some of them doesn't have my added image).

任何建议/意见将AP preciated。

any suggestion/comments would be appreciated.

推荐答案

解决方案比我想的东西更容易。

Solution was easier than the thing that i was thinking.

首先,我删除了这些

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_news_adapter ),我增加了一个ImageView的,并设置其属性源用我的形象。

and putOverlay() method from my list adapter and then in XML file of row (list_news_adapter), I added another imageView and set its source attribute with my image.

哇,它工作正常。

这篇关于Android的,如何通过另一个位图层添加一个位图层,动态地从名单?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆