1

https://github.com/Dreddik/AndroidTouchGalleryのこのコードを使用して、imageView でピンチとズームを処理しています。これで、オンタッチを非表示にする機能が追加されましたActionBar

問題:dimBar()タッチするたびに呼び出されます(シングル)。ダブルタッチまたはパンすると、トップバーが上下し続けます

アイデア: このメソッドをコードのどこに配置すればよいかわかりません。私は本当にアンドロイドに慣れていないだけでなく、人々のコードを使用しているので、今は本当に馬鹿です。

これはdimBar()中にありますTouchImageActivity

public void dimBar () {
        if (actionBar.isShowing()) { // hide actionBar
            actionBar.hide();
            window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
        }
        else {
            actionBar.show();
            window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
        }
}

これは onTouchListener の部分です。

protected void init() {

mTimerHandler = new TimeHandler(this);
matrix.setTranslate(1f, 1f);
m = new float[9];
setImageMatrix(matrix);
setScaleType(ScaleType.MATRIX);
if (Build.VERSION.SDK_INT >= 8)
{
    mScaleDetector = new ScaleGestureDetector(mContext, new ScaleListener());
}
setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent rawEvent) {
        WrapMotionEvent event = WrapMotionEvent.wrap(rawEvent);
        if (mScaleDetector != null)
        {
             ((ScaleGestureDetector)mScaleDetector).onTouchEvent(rawEvent);
        }
        fillMatrixXY();
        PointF curr = new PointF(event.getX(), event.getY());

        switch (event.getAction() & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_DOWN:
                allowInert = false;
                savedMatrix.set(matrix);
                last.set(event.getX(), event.getY());
                start.set(last);
                mode = DRAG;
                dimBar2();
                break;
            case MotionEvent.ACTION_POINTER_DOWN:
                oldDist = spacing(event);
                //Log.d(TAG, "oldDist=" + oldDist);
                if (oldDist > 10f) {
                    savedMatrix.set(matrix);
                    midPoint(mid, event);
                    mode = ZOOM;
                    //Log.d(TAG, "mode=ZOOM");
                }
                break;
            case MotionEvent.ACTION_UP:
                allowInert = true;
                mode = NONE;
                int xDiff = (int) Math.abs(event.getX() - start.x);
                int yDiff = (int) Math.abs(event.getY() - start.y);

                if (xDiff < CLICK && yDiff < CLICK) {

                    //Perform scale on double click
                    long pressTime = System.currentTimeMillis();
                    if (pressTime - lastPressTime <= DOUBLE_PRESS_INTERVAL) {
                        if (mClickTimer != null) mClickTimer.cancel();
                        if (saveScale == 1)
                        {
                            final float targetScale = maxScale / saveScale;
                            matrix.postScale(targetScale, targetScale, start.x, start.y);
                            saveScale = maxScale;
                        }
                        else
                        {
                            matrix.postScale(minScale / saveScale, minScale / saveScale, width / 2, height / 2);
                            saveScale = minScale;
                        }
                        calcPadding();
                        checkAndSetTranslate(0, 0);
                        lastPressTime = 0;
                    }
                    else {
                        lastPressTime = pressTime;
                        mClickTimer = new Timer();
                        mClickTimer.schedule(new Task(), 300);
                    }
                    if (saveScale == minScale) {
                        scaleMatrixToBounds();
                    }
                }

                break;

            case MotionEvent.ACTION_POINTER_UP:
                mode = NONE;
                velocity = 0;
                savedMatrix.set(matrix);
                oldDist = spacing(event);
                //Log.d(TAG, "mode=NONE");
                break;

            case MotionEvent.ACTION_MOVE:
                allowInert = false;
                if (mode == DRAG) {
                    float deltaX = curr.x - last.x;
                    float deltaY = curr.y - last.y;
4

0 に答える 0