2

クリックしたときに画像ボタンの色合いを変更するコードがあります。

ここにJavaコードがあります

 button.setOnTouchListener(new OnTouchListener() {

        public boolean onTouch(View v, MotionEvent me) 
        {
            if (me.getAction() == MotionEvent.ACTION_DOWN) 
            {

                button.setColorFilter(Color.argb(150, 155, 155, 155));

            } 

            else if (me.getAction() == MotionEvent.ACTION_UP) 

            {
                button.setColorFilter(Color.argb(0, 155, 155, 155)); 
                }
            return false;
        }

    });

コードはこの xml で正常に動作しており、クリックするとボタンが暗くなります。

  <ImageButton
    android:id="@+id/schedule"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_x="138dp"
    android:layout_y="169dp"
    android:src="@drawable/schedule"
    />

しかし、このxmlでは機能していません。クリックしてもボタンは暗くなりません。

  <ImageButton
    android:id="@+id/schedule"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_x="138dp"
    android:layout_y="169dp"
    android:background="@drawable/schedule"
    />

android:background を使用すると setColorFilter が機能しないのはなぜですか? しかし、私が android:src を使用すると、正常に動作します。

4

1 に答える 1

6

簡単な答えは次のとおりです。

  • 属性はandroid:backgroundView クラスのメソッドを参照し、
  • android:srcImageViewのメソッドを参照し、

また、各クラスは独自のバックグラウンド リソースを維持します。そのため、ImageView メソッドを呼び出すと、setColorFilter()そのローカル バックグラウンド リソース ( によって設定されたものsrc)にフィルタが適用され、 によってsetColorFilter()設定されたビュー リソースは認識されませんbackground

于 2012-09-08T16:27:52.827 に答える