0

ユーザーがサーバーに画像をアップロードできるようにするAndroidアプリに取り組んでいます。選択画面では、ピンチで画像を拡大縮小してから、画像をタップして選択します。実装中に2つの問題に遭遇しました。

最初に遭遇した問題はOnClickListener、画像がクリックされたことを検出するために を使用していたときでした。そのため、指が画像の上にある限り、画像を拡大または縮小できませんでした。私は次のように実装しました:

setOnClickListener(new OnClickListener()
{
    public void onClick(View arg0) 
    {
        ToggleSelection();
        invalidate();
    }
});

画像の上に指を置いても画像を拡大縮小できるようにしたいので、2 番目のアプローチを採用することにしました。代わりに追加しましたOnTouchListener

setOnTouchListener(new OnTouchListener()
{
    public boolean onTouch(View v, MotionEvent event) 
    {
        int i = event.getAction();
        Log.d("TouchInfo123","Event action: " + i);
        switch(i & MotionEvent.ACTION_MASK)
        {
        case MotionEvent.ACTION_UP:
        {
            ToggleSelection();
            invalidate();
            break;
        }
        }
        return false;
    }
});

event.getAction()次に、 が の値である 0 を常に返すことに気付きましたMotionEvent.ACTION_DOWN。そこで、動作するのをリッスンすることに切り替えましたMotionEvent.ACTION_DOWN。すこし。

私が今直面している問題は、画像を拡大縮小するときに、指が画像の 1 つに触れると、選択が切り替わり、非常に煩わしいことです。

次の 2 つのいずれかを実行できるようにしたいと考えています。

を使用しますが、指が画像に触れていても画像をスケーリングOnClickListenerできるようにしますScaleGestureDetector

また

タッチイベントが発生したときにスケーリングされていないことがわかるように、 を使用してOnTouchListener作業を行います。MotionEvent.ACTION_UP

助言がありますか?

4

1 に答える 1

0

私はこの問題を回避することができました。取得できなかった理由MotionEvent.ACTION_UPは、常に false を返していたため、イベントを消費していなかったからです。期待どおりに動作させるためにこれを使用しました

boolean mouseDown = false;

public boolean onTouchEvent(MotionEvent event) 
{
    switch(event.getAction() & MotionEvent.ACTION_MASK)
    {
    case MotionEvent.ACTION_UP:
    {
        if(mouseDown)
        {
            ToggleSelection();
            invalidate();
            mouseDown = false;
        }
        break;
    }
    case MotionEvent.ACTION_OUTSIDE:
    case MotionEvent.ACTION_CANCEL:
    case MotionEvent.ACTION_POINTER_DOWN:
    case MotionEvent.ACTION_POINTER_UP:
    {
        mouseDown = false;
        break;
    }
    case MotionEvent.ACTION_DOWN:
    {
        mouseDown = true;
        return true;
    }
    }
    return false;
}
于 2012-06-02T00:24:51.280 に答える