0

ボタンボタン

これが2つのスクリーンショットです。左側はエミュレーターから、右側はデバイスからのものであるため、同じサイズではありません。デバイスから両方を取得する必要があります。申し訳ありません。

どちらも同じドローアブルを使用しています。

左:レイアウトに設定された背景:

        <ImageButton
        android:id="@+id/backFromOldCurves"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/backunpressed"
        android:paddingLeft="10sp"
        android:paddingRight="10sp"
        android:src="@drawable/navigationpreviousitem" />

右:ACTION_UPのonTouchで動的に設定された背景:

public boolean onTouch(View v, MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        v.setBackgroundDrawable(getResources().getDrawable(R.drawable.backpressed));

    }
    if (event.getAction() == MotionEvent.ACTION_UP) {
        v.setBackgroundDrawable(getResources().getDrawable(R.drawable.backunpressed));
        onClick(v);

    }

    return true;

}

setBackgroundDrawableでDrawableをNinePatchDrawableにキャストしても機能しません。どうすればこれを回避できますか?

4

1 に答える 1

1

使用しない理由

v.setBackgroundResource(R.drawable.backpressed);

編集:onTouch()でtrueを返さないでください。falseを返すと、MotionEvent.ACTOIN_UPがトリガーされたときにonClick()を呼び出す必要がなくなります。

public boolean onTouch(final View v, final MotionEvent event) {
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
        v.setBackgroundResource(R.drawable.backpressed);
    case MotionEvent.ACTION_UP:
        v.setBackgroundResource(R.drawable.backunpressed);
    default:
        Thread.sleep(50); // sleep for performance, otherwise you'd get flooded with ACTION_MOVE
    }
    return false; // return false to not consume the event
}
于 2012-06-16T12:12:31.520 に答える