0

次のように、インターフェイスでプログラムによって ImageView を作成しています。

...
ImageView image = new ImageView(getActivity());
TableRow.LayoutParams params = new TableRow.LayoutParams(width, height);
image.setLayoutParams(params);
image.setPadding(5, 3, 5, 3);
image.setImageBitmap(myBitmap);
image.setTag(key);
image.setOnClickListener(this);
image.setOnTouchListener(this);
...

そして、これは私の onTouch メソッドです:

@Override
public boolean onTouch(View v, MotionEvent event) {
    // Apply the pressed effect on a button
    ImageView button = (ImageView) v;
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        button.setColorFilter(Color.argb(150, 155, 155, 155));
        return false;
    } else if (event.getAction() == MotionEvent.ACTION_UP) {
        button.setColorFilter(Color.argb(0, 155, 155, 155));
        return false;
    }
    return false;
}

もちろん、私は OnTouchListener を実装しています。私の目標は、ImageView が押されたときにエフェクトを追加することです。しかし、私は奇妙な振る舞いに気付きました:

  • デバイス/エミュレーターに Jelly Bean がある場合、ImageView は消え、クリックしても表示されなくなります。

  • それ以外の場合、デバイス/エミュレーターに Android (ICS、Gingerbread) の Jelly Bean より前のバージョンがある場合、ImageView は問題なく、インターフェイスから消えません。

Logcat はエラーを報告せず、代わりに ImageButton を使用したくない/使用する必要はありません。

私の質問は次のとおりです。コードに何か不足していますか? Android リリースの 2 つの異なるバージョン (ただし、現時点ではまだ) でこれが発生するのはなぜですか?

前もって感謝します。

編集:このコードがフラグメントの一部であることを忘れていました。

4

2 に答える 2

0

問題は、ImageView に割り当てている Color 値にあると思います。

Color.argb(0, 155, 155, 155)

アルファ チャネル (最初のパラメーター) の 0 は透明を意味します。詳細については、リファレンスをご覧ください: http://developer.android.com/reference/android/graphics/Color.html

于 2013-06-08T13:05:21.523 に答える
0

さて、すべてのサイトとドキュメントを「ガンダルフィング」する時間がないので、別の解決策にたどり着きました。ImageView にアニメーションを追加しました。

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<alpha
    android:duration="100"
    android:fromAlpha="1.0"
    android:toAlpha="0.5" >
</alpha>

<scale
    android:duration="10"
    android:fromXScale="1"
    android:fromYScale="1"
    android:pivotX="50%"
    android:pivotY="50%"
    android:toXScale="0.9"
    android:toYScale="0.9" >
</scale>
</set>

次に、onTouch イベントを使用して ImageView でアクティブにします (アクティビティまたはフラグメントは OnTouchListner を実装する必要があります)。

image.setOnTouchListener(this);

最後に、これは onTouch メソッドです。

@Override
public boolean onTouch(View v, MotionEvent event) {
    // Apply the pressed effect on a button
    ImageView button = (ImageView) v;
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        button.startAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.image_click));
        return false;
    } else if (event.getAction() == MotionEvent.ACTION_UP) {
        return false;
    }
    return false;
}
于 2013-06-11T10:17:02.873 に答える