Мой ImageView не будет работать в положении, которое я установил в своем xml, но когда он находится в верхнем левом углу, он работает нормально. Так как я могу отрегулировать положение? - PullRequest
0 голосов
/ 18 ноября 2018

У меня проблема с imageView, после того как я добавил layoutParams и установил ширину и высоту, мое изображение после компиляции попадает в верхний левый угол. Как я могу это исправить ... Спасибо, andvance. Я новичок в студии android, поэтому я не уверен, что сейчас все работает правильно, и я начал делать какую-то маленькую игру, и это случилось.

Вот мой XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintGuide_end="100dp"
android:background="@drawable/spacebackground"
tools:context=".MainActivity">

<ImageView
    android:id="@+id/plane"
    android:layout_width="wrap_content"
    android:layout_height="150dp"
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentBottom="true"
    android:layout_marginLeft="0dp"
    android:layout_marginRight="119dp"
    android:layout_marginBottom="29dp"
    android:layout_x="116dp"
    android:layout_y="343dp"
    android:src="@drawable/warplane" />
  </RelativeLayout>

А вот и мой код

package com.example.marko.warmachine;


  public class MainActivity extends Activity {

//variable
private ViewGroup mainLayout;
private ImageView image;
private int xDelta;
private int yDelta;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mainLayout = (RelativeLayout) findViewById(R.id.main);
    image = (ImageView) findViewById(R.id.plane);

    plane.setOnTouchListener(onTouchListener());
}

private View.OnTouchListener onTouchListener() {
    return new View.OnTouchListener() {

        @SuppressLint("ClickableViewAccessibility")
        @Override
        public boolean onTouch(View view, MotionEvent event) {

            final int x = (int) event.getRawX();
            final int y = (int) event.getRawY();

            switch (event.getAction() & MotionEvent.ACTION_MASK) {

                case MotionEvent.ACTION_DOWN:
                    RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams)
                            view.getLayoutParams();

                    xDelta = x - lParams.leftMargin;
                    yDelta = y - lParams.topMargin;
                    break;

                case MotionEvent.ACTION_UP:
                    break;
                case MotionEvent.ACTION_POINTER_DOWN:
                    break;

                case MotionEvent.ACTION_POINTER_UP:
                    break;
                case MotionEvent.ACTION_MOVE:
                    RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view
                            .getLayoutParams();
                    layoutParams.leftMargin = x - xDelta;
                    layoutParams.topMargin = y - yDelta;
                    layoutParams.rightMargin = 0;
                    layoutParams.bottomMargin = 0;
                    view.setLayoutParams(layoutParams);
                    break;
            }
            mainLayout.invalidate();
            return true;
        }
    };
}

Я РЕДАКТИРУЮ код, так что это то, что я получаю, но все равно не работаю.

1 Ответ

0 голосов
/ 18 ноября 2018

Не следует инициализировать layoutParams с нуля.Получить ранее определенные атрибуты из image самого экземпляра представления:

RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) image.getLayoutParams();

...