@Slavik12

Почему при выходе за границы экрана ImageView меняет свой размер?

Я сделал чтобы мой ImageView реагировал на касания(двигался по экрану). Когда картинка выходит за пределы сверху и слева, тот она просто заходит туда и все. Но когда картинка касается правой и нижней части, то она уменьшается в размерах и не выходит за пределы. Я не могу понять из-за чего такое поведение и как это можно устранить.

public class MainActivity extends AppCompatActivity implements View.OnTouchListener {

    LinearLayout mainLayout;
    ImageView image;
    private int xDelta;
    private int yDelta;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mainLayout = (LinearLayout) findViewById(R.id.MyLayout);
        image = (ImageView) findViewById(R.id.imageView2);
        image.setImageResource(R.drawable.dama);
        Log.d(LOG_TAG, "image: " + image);
        Log.d(LOG_TAG, "mainLayout: " + mainLayout);
        image.setOnTouchListener(this);

    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
         int x = (int) event.getRawX();
         int y = (int) event.getRawY();
        switch (event.getAction()) {
            // касание началось
            case MotionEvent.ACTION_DOWN:
                LinearLayout.LayoutParams lParams = (LinearLayout.LayoutParams) v.getLayoutParams();
                xDelta = x - lParams.leftMargin;
                yDelta = y - lParams.topMargin;
                break;

            // тащим
            case MotionEvent.ACTION_MOVE:
                LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams) v.getLayoutParams();
                layoutParams.leftMargin = x - xDelta;
                layoutParams.topMargin = y - yDelta;
                layoutParams.rightMargin = 0;
                layoutParams.bottomMargin = 0;
                v.setLayoutParams(layoutParams);

                break;

            // касание завершено
            case MotionEvent.ACTION_UP:

                break;
        }
        mainLayout.invalidate();
        return true;
    }
}
  • Вопрос задан
  • 68 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы