プロジェクトでは Universal Image Loader ( https://github.com/nostra13/Android-Universal-Image-Loader ) を使用します。これを使用して、グリッドビューに画像をロードします。しかし、すべての画像に新しい透明レイヤーとテキストの説明を追加したいと考えています。onDraw メソッドをオーバーライドすると、このレイヤーが表示されますが、グリッドビューをスクロールしたときにのみ表示されます。
このライブラリを使用して ImageView に新しいレイヤーを描画することはできますか? 14 を超える新しい Android デバイスの場合、コードは期待どおりに機能しますが、エミュレーターや以前のバージョンのシステムでは機能しないことがわかりました。
ProductView.java
public class ProductView extends ImageView {
private Product product;
private Paint p = new Paint();
private Context context;
public ProductView(Context context, Product product) {
super(context);
setScaleType(ScaleType.FIT_CENTER);
setAdjustViewBounds(true);
setId(product.getProductId());
setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 300));
this.product = product;
this.context = context;
}
@Override
protected void onDraw (Canvas canvas) {
super.onDraw(canvas);
Integer width = (int)canvas.getWidth();
Integer height = (int)canvas.getHeight();
p.setColor(Color.BLACK);
p.setAlpha(80);
canvas.drawRect(0, (int)(height*0.73), width, height, p);
p.setAlpha(100);
p.setColor(Color.WHITE);
p.setTextSize(16);
p.setFakeBoldText(true);
StaticLayout layout = new StaticLayout(product.getProductName(), new TextPaint(p), width-10,
Layout.Alignment.ALIGN_NORMAL,(float)1.0, (float)0.0,
true);
canvas.translate(5, (int)(height*0.73));
layout.draw(canvas);
canvas.restore();
}
}
ImageGridActivity.java
public class ImageGridActivity extends Activity implements SlideMenuInterface.OnSlideMenuItemClickListener {
[...]
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
[...]
GridView gridView = (GridView) findViewById(R.id.gridviewAC);
gridView.setAdapter(new ImageGridUniwersalAdapter(this, imageLoader, products.productList, options));
gridView.setOnScrollListener(new PauseOnScrollListener(imageLoader, true, true));
}
[...]
}
ImageGridUniwersalAdapter.java
public class ImageGridUniwersalAdapter extends BaseAdapter {
private DisplayImageOptions options;
private final List<Product> products;
public ImageLoader imageLoader;
private Context context;
public ImageGridUniwersalAdapter(Context context, ImageLoader imageLoader, List<Product> products, DisplayImageOptions options){
this.options = options;
this.products = products;
this.imageLoader = imageLoader;
this.context = context;
}
[...]
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Product tmpProd = products.get(position);
ProductView pv = new ProductView(this.context, tmpProd);
imageLoader.displayImage(
SettingsHelper.SERVERURL+tmpProd.getImgThumbUri(),
pv,
options);
return pv;
}
}
grid_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridviewAC"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:horizontalSpacing="4dip"
android:numColumns="2"
android:stretchMode="columnWidth"
android:verticalSpacing="4dip"
android:padding="4dip" />