2012-06-14 36 views
1

在我的應用程序中,我有一個列表適配器。每行包含左側的imageView和右側的兩個textView。爲了獲取圖像,我使用了Universal-Image-Loader庫。Android,如何從列表中動態添加位圖圖層到另一個位圖圖層?

我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列表到libray在不同的線程下載。

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

這是功能部分。結果呢! 只要主映像正在下載,Universal Image Loader庫就會使用預定義的映像。我的代碼可以合併這兩個層次。 enter image description here

然而,儘管我希望我的疊加圖像坐在這個圖像的頂部時,主圖像被下載它會覆蓋前面的圖像。 enter image description here

但是,屏幕的滾動後,我可以看到我添加的圖像(大多數圖像都有,其中一些沒有我添加的圖像)。 enter image description here

任何建議/意見將不勝感激。

回答

2

解決方案比我想的要容易。

首先,我從我的名單適配器刪除那些

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()方法,然後在行(list_news_adapter)的XML文件,我添加了另一個ImageView的,並設置其屬性源用我的形象。

哇,它工作正常。

相關問題