2015-10-11 48 views
0

我正在用BaseAdapter填充一个GridView,但滚动时它非常慢。可能是什么问题?它填写了两个imageViews + a textViewGridView很慢

预先感谢您。

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    RowHolder rowHolder = null; 
    View itemView = convertView; 
    final ThemeModel curTheme = getItem(position); 

    if (itemView == null) { 

     rowHolder = new RowHolder(); 

     itemView = mInflater.inflate(R.layout.view_themes_grid_row, parent, false); 
     rowHolder.imageView = (ImageView) itemView.findViewById(R.id.imageView); 
     rowHolder.imageView2 = (ImageView) itemView.findViewById(R.id.imageView2); 
     rowHolder.textView = (TextView) itemView.findViewById(R.id.textView); 

     itemView.setTag(rowHolder); 

    } else { 
     rowHolder = (RowHolder) itemView.getTag(); 
    } 

    rowHolder.textView.setText(curTheme.getThemeName()); 

    //Log("curTheme name = " + curTheme.getThemeName() + "/mainBg = " + curTheme.mainBg); 



    if(curTheme.hasBgImage()) { 

    // grid view item background image 
     rowHolder.imageView.setBackgroundResource(curTheme.getMainBgImageId(Themes.this)); 

     //Picasso.with(Themes.this).load(drawable).into(rowHolder.imageView); 
    } else { 

    // grid view item background color 
        rowHolder.imageView.setBackgroundColor(Color.parseColor(curTheme.mainBg)); 
     //Picasso.with(Themes.this).load(Color.parseColor(curTheme.mainBg)).into(rowHolder.imageView); 
    } 

    if(curTheme.isUsing()) { //tick icon 
     rowHolder.imageView2.setVisibility(View.VISIBLE); 
    } 

    else { 
     rowHolder.imageView2.setVisibility(View.INVISIBLE); 
    } 

    rowHolder.imageView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      if(!curTheme.isUsing()) //can cause error.. 
       chooseTheme(curTheme); 
     } 
    }); 

    return itemView; 
} 

回答

1

我们没有足够的关于imageView设置的信息,但是问题可能是因为它们的大小。您可以在申请查看前对其进行缩放。

Drawable bgDrawable = null; 

if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
    bgDrawable = getResources().getDrawable(curTheme.getMainBgImageId(Themes.this), null); 
} else { 
    bgDrawable = getResources().getDrawable(curTheme.getMainBgImageId(Themes.this)); 
} 

//Scale the images 
Bitmap bitmap = ((BitmapDrawable) bgDrawable).getBitmap(); 
Drawable drawable = new BitmapDrawable(
       getResources(), Bitmap.createScaledBitmap(bitmap, 
       bitmap.getWidth()/4, 
       bitmap.getHeight()/4, 
       true) 
     ); 

rowHolder.imageView.setBackground(drawable); 
//You can use picasso 
0

有可能是不同的东西..

  1. 是您imageviews的固定布局的大小?父级的大小取决于在imageview中加载的图像的大小?

如果是的话,这会减慢你的视野,因为每次载入新图像时都必须对整个布局进行调整。

  1. 如果图像大于imageview,则应在后台线程中将图片向下采样。