0

onTouchを使用してimageView内の画像を移動しますが、残念ながら画面の外に移動します。画像の境界が境界線に接触した場合に、画像の移動を停止できるように制御するためのより良い方法はありますか?

4

1 に答える 1

1

あなたの質問を理解するのに苦労しています。しかし、私があなたの質問を正しく解釈した場合、現在ドラッグ可能なイメージビューがあり、イメージの境界線が画面の外に出ないようにしたいですか? これを防ぐ唯一の方法は、画像の境界が画面の外に出ていないかどうかを確認することです。以下のコードは完全ではありません。途中で役立つだけです。finalHeight と finalWidth は、画面上の imageView の実際のサイズ (つまり、imageview 内の実際の画像のサイズ) を保持します。

int windowwidth = getWindowManager().getDefaultDisplay().getWidth();
int windowheight = getWindowManager().getDefaultDisplay().getHeight();
final ImageView mImage= (ImageView)findViewById(R.id.mImage);

int finalHeight, finalWidth;
ViewTreeObserver vto = mImage.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
    public boolean onPreDraw() {
        finalHeight = mImage.getMeasuredHeight();
        finalWidth = mImage.getMeasuredWidth();
        return true;
    }
});

mImage.setOnTouchListener(new View.OnTouchListener() {

                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    LayoutParams layoutParams = (LayoutParams) mImage.getLayoutParams();
                    switch(event.getAction())
                    {
                    case MotionEvent.ACTION_DOWN:   
                                                    break;
                    case MotionEvent.ACTION_MOVE:
                         int x_cord = (int)event.getRawX();
                         int y_cord = (int)event.getRawY();

                         if(x_cord>windowwidth){x_cord=windowwidth;}
                         if(y_cord>windowheight){y_cord=windowheight;}

                         layoutParams.leftMargin = x_cord - 10; // Set these to co-responding values
                         layoutParams.topMargin = y_cord - 10; // Set these to co-responding values
                         mImage.setLayoutParams(layoutParams);
                         break;
                    default:
                         break;
                    }
                    return true;
                }
        });

これは途中であなたを助けるかもしれません=)

于 2012-12-19T08:46:08.613 に答える