0

初心者の質問です。アクティビティ レイアウトで ImageView を使用していますが、ボタンと同様の動作が必要です。ImageView が既に onClick を生成していることに気付きました。それがしないのは、私が追加したいタッチとアンタッチで視覚的なフィードバックを提供することです。

同様に、長押しの処理が必要になります。ImageView がそれを行うかどうかはまだわかりません。

少し掘り下げてみたところ、View が Runnable を実装していることがわかりました。ユーザーが画像をタップすると、何かが performClick を呼び出し、次に ImageView.PerformClick を呼び出し、最終的にすべてのリスナー (これが私のアクティビティ) に対して onClick を呼び出します。ImageView が PerformClick を処理する頃には、画像の外観を変更するには遅すぎます。onShowPress 時にどうすればいいですか?

もう1つの注意:gestureDetectorをImageViewに追加することを検討しました(そして試しました)が、onClick処理を再実装する必要があるようです-とにかく、アクティビティはonClickの受信を停止しました.

私がやりたいことを行うには、まったく別の方法があるかもしれません。

ありがとう。

編集:タッチアクションを監視するためのテストコード:package com.example.mockup;

import android.content.Context;
import android.util.AttributeSet;
import android.view.DragEvent;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageButton;

public class ImageGestureButton extends ImageButton
   implements View.OnTouchListener, View.OnClickListener, View.OnDragListener,
   View.OnLongClickListener
{
  public ImageGestureButton (Context context, AttributeSet attrs)
  {
    super(context, attrs);
    setOnTouchListener (this);
    setOnClickListener (this);
    setOnLongClickListener (this);
    setOnDragListener (this);
    setLongClickable (true);
  }

  public boolean onTouch (View v, MotionEvent e)
  {
    System.out.println ("onTouch " + e.getAction());
    return false;
  }

  public void onClick (View v)
  {
    System.out.println ("onClick");
  }

  public boolean onDrag (View v, DragEvent e)
  {
    System.out.println ("onDrag");
    return false;
  }

  public boolean onLongClick (View v)
  {
    System.out.println ("onLongClick");
    return false;
  }

}
4

2 に答える 2

1

ImageButtonを使用します。次に、setOnClickListener()を使用して、クリックしたときに呼び出されるメソッドを接続します。さらに、長押し動作にはsetOnLongClickListener()を使用できます。

最後に、状態 (フォーカス、選択など) に応じて異なる背景、色などを設定することもできます。ドキュメントを見てください。

テスト コードに関しては、onLongClick() が false を返しています。これは、ロング クリックが消費されなかったことを示しています。戻り値を true に変更してみてください。これにより、 onClick() も起動されなくなります。また、onDrag() イベントを発生させるために startDrag() メソッドを呼び出す必要があります。さまざまなイベント リスナーと startDrag() メソッドの詳細については、 android.view のドキュメントを参照してください。

于 2012-08-03T23:33:35.857 に答える
0

あなたがやりたいことは、これを使用して拡張することです:

http://developer.android.com/reference/android/widget/ToggleButton.html

これには 2 つの状態があり、ビューであるため、OnClick と OnLongClick が利用可能です。

于 2012-08-04T05:00:56.783 に答える