プロジェクトでグリッドビュー レイアウトで UIL を使用しようとしています。テスト目的で、プロジェクト自体のコードを変更しました。私の要件は、元のビットマップをレイヤー 0 のベース イメージとして、レイヤー 1 の目盛りを付けて TransitionDrawable を表示することです。これがカスタム BitmapDisplayer コードです。
public class customBitmapDisplayer implements BitmapDisplayer
{
public static Drawable tick;
Drawable[] layers = new Drawable[2];
TransitionDrawable mytransition;
@Override
public Bitmap display(Bitmap bitmap, ImageView imageView)
{
BitmapDrawable base_image = new BitmapDrawable(imageView.getResources(), bitmap);
layers[0] = base_image;
layers[1] = tick;
mytransition = new TransitionDrawable(layers);
imageView.setImageDrawable(mytransition);
return bitmap;
}
public customBitmapDisplayer(Drawable tick_mark)
{
tick = tick_mark;
}
}
getView も少し変更しました。これがコードです。
if(selected[position]) //selected is a boolean array
{
TransitionDrawable quickTransition = (TransitionDrawable)imageView.getDrawable();
quickTransition.startTransition(0);
}
ちなみに、私はUIL 1.8.0、デフォルトのImageConfiguration、DisplayImageOptionsを使用して、コードが上記のカスタムBitmapDisplayerで使用するように変更しました。私はAndroid 2.3.4でテストし、問題は見つかりませんでしたが、Android 4.0.4では、すべての画像を「選択」した後にグリッドビュー全体をスクロールすると、BitmapDrawableをTransitionDrawableにキャストできないというgetViewメソッドでClassCastExceptionを取得しました。
ここにスタックトレースがあります。
03-20 20:46:40.797: E/AndroidRuntime(11943): FATAL EXCEPTION: main
03-20 20:46:40.797: E/AndroidRuntime(11943): java.lang.ClassCastException: android.graphics.drawable.BitmapDrawable cannot be cast to android.graphics.drawable.TransitionDrawable
03-20 20:46:40.797: E/AndroidRuntime(11943): at com.nostra13.example.universalimageloader.ImageGridActivity$ImageAdapter.getView(ImageGridActivity.java:219)
03-20 20:46:40.797: E/AndroidRuntime(11943): at android.widget.AbsListView.obtainView(AbsListView.java:2019)
03-20 20:46:40.797: E/AndroidRuntime(11943): at android.widget.GridView.makeAndAddView(GridView.java:1338)
03-20 20:46:40.797: E/AndroidRuntime(11943): at android.widget.GridView.makeRow(GridView.java:343)
03-20 20:46:40.797: E/AndroidRuntime(11943): at android.widget.GridView.fillUp(GridView.java:384)
03-20 20:46:40.797: E/AndroidRuntime(11943): at android.widget.GridView.fillGap(GridView.java:260)
03-20 20:46:40.797: E/AndroidRuntime(11943): at android.widget.AbsListView.trackMotionScroll(AbsListView.java:4567)
03-20 20:46:40.797: E/AndroidRuntime(11943): at android.widget.AbsListView$FlingRunnable.run(AbsListView.java:3834)
03-20 20:46:40.797: E/AndroidRuntime(11943): at android.os.Handler.handleCallback(Handler.java:605)
03-20 20:46:40.797: E/AndroidRuntime(11943): at android.os.Handler.dispatchMessage(Handler.java:92)
03-20 20:46:40.797: E/AndroidRuntime(11943): at android.os.Looper.loop(Looper.java:137)
03-20 20:46:40.797: E/AndroidRuntime(11943): at android.app.ActivityThread.main(ActivityThread.java:4448)
03-20 20:46:40.797: E/AndroidRuntime(11943): at java.lang.reflect.Method.invokeNative(Native Method)
03-20 20:46:40.797: E/AndroidRuntime(11943): at java.lang.reflect.Method.invoke(Method.java:511)
03-20 20:46:40.797: E/AndroidRuntime(11943): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-20 20:46:40.797: E/AndroidRuntime(11943): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-20 20:46:40.797: E/AndroidRuntime(11943): at dalvik.system.NativeStart.main(Native Method)
03-20 20:46:44.377: I/Process(11943): Sending signal. PID: 11943 SIG: 9
ImageGridActivity.java の 219 行目に次のコードがあります。
TransitionDrawable quickTransition = (TransitionDrawable)imageView.getDrawable();
これが私のgetViewコードです。
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
final ImageView imageView;
if (convertView == null)
{
imageView = (ImageView) getLayoutInflater().inflate(R.layout.item_grid_image, parent, false);
}
else
{
imageView = (ImageView) convertView;
}
imageLoader.displayImage(imageUrls[position], imageView, options);
if(selected[position])
{
TransitionDrawable quickTransition = (TransitionDrawable)imageView.getDrawable();
quickTransition.startTransition(0);
}
return imageView;
}