Мне проще это проверить, да.

аюсь создать приложение, которое может переместитьImageView на вашем устройстве, как перетаскивание, и когда я ставлю, как 75%ImageView из экрана показываютToast например. Я читал оMotionEvent а такжеonTouchListener и я следил за этимвопрос, но это не убеждает меня.

редактировать

Мой текущий код:

public class MainActivity extends AppCompatActivity implements View.OnTouchListener {

    int windowwidth;
    int windowheight;
    private ImageView mImageView;
    private ViewGroup mRrootLayout;
    private int _xDelta;
    private int _yDelta;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        DisplayMetrics displaymetrics = new DisplayMetrics();
        this.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        windowwidth = displaymetrics.widthPixels;
        windowheight = displaymetrics.heightPixels;
        mRrootLayout = (ViewGroup) findViewById(R.id.root);
        mImageView = (ImageView) mRrootLayout.findViewById(R.id.im_move_zoom_rotate);

        RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(150, 150);
        mImageView.setLayoutParams(layoutParams);
        mImageView.setOnTouchListener(this);
    }
    public boolean onTouch(View view, MotionEvent event) {
        final int X = (int) event.getRawX();
        final int Y = (int) event.getRawY();
        if(X == 0){
            Toast.makeText(this, "OUT", Toast.LENGTH_SHORT).show();
        }
        else if (Y == 0){
            Toast.makeText(this, "OUT", Toast.LENGTH_SHORT).show();
        }
        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 = -250;
                layoutParams.bottomMargin = -250;
                view.setLayoutParams(layoutParams);
                break;
        }
        mRrootLayout.invalidate();
        return true;
    }
}

Я сделал этоif а такжеelse if просто чтобы знать, еслиImageView выходит из устройства, на левой и правой стороне устройства кажется, что все в порядке, но я хотел бы сделать его более чистым и не написанным полностью, также я не получаюLayoutParams(150,150) почему 150? Также я не понимаю, почему я должен создатьRelativeLayout.LayoutParams и почему я должен поставить

layoutParams.rightMargin = -250;
layoutParams.bottomMargin = -250;

Я сделалif/else if потому что я хочу удалить, когда пользователь хочет поставитьImageView вне устройства, так что мне нужно контролировать, когда он пытается, в тот момент, когда я получил только TOP / LEFT / RIGHT, а не вниз, я также получаю размеры моего устройства, просто чтобы попробовать, если X или Y совпадают с высотой или просто покажиToast но он не делает это правильно.

Теперь мойImageView этоic_launcher но это будет больше (почти средний экран).

НОТА

Если вы знаете какой-либо другой способ сделать это проще или понятнее, не стесняйтесь размещать его здесь, я не забочусь о своем коде, я могу адаптировать его, я просто хочу, чтобы он был ясным и не был жестко закодирован.

 Skizo-ozᴉʞS20 окт. 2017 г., 10:53
Если вы знаете, как решить эту проблему (ЕСЛИ ПРОВЕРЕНО), не стесняйтесь написать ответ, и я проверю его :)
 Abdul Ahad20 окт. 2017 г., 09:18
Я столкнулся с подобной проблемой, а затем получил решение.Проверка перетаскивания за пределы

Ответы на вопрос(6)

Решение Вопроса

вал ненужные разделы и сделал обозначения для тех частей, которые требуют пояснения. Вот как выглядит готовый продукт:

На этом рисунке показано, как рассчитывается левое поле. Тот же тип расчета применяется к верхней марже.

MainActivity.java

public class MainActivity extends AppCompatActivity implements View.OnTouchListener {

    int windowwidth; // Actually the width of the RelativeLayout.
    int windowheight; // Actually the height of the RelativeLayout.
    private ImageView mImageView;
    private ViewGroup mRrootLayout;
    private int _xDelta;
    private int _yDelta;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // We are interested when the image view leaves its parent RelativeLayout
        // container and not the screen, so the following code is not needed.
//        DisplayMetrics displaymetrics = new DisplayMetrics();
//        this.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
//        windowwidth = displaymetrics.widthPixels;
//        windowheight = displaymetrics.heightPixels;
        mRrootLayout = (ViewGroup) findViewById(R.id.root);
        mImageView = (ImageView) mRrootLayout.findViewById(R.id.im_move_zoom_rotate);

        // These these following 2 lines that address layoutparams set the width
        // and height of the ImageView to 150 pixels and, as a side effect, clear any
        // params that will interfere with movement of the ImageView.
        // We will rely on the XML to define the size and avoid anything that will
        // interfere, so we will comment these lines out. (You can test out how a layout parameter
        // can interfere by setting android:layout_centerInParent="true" in the ImageView.
//        RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(150, 150);
//        RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(150, 150);
//        mImageView.setLayoutParams(layoutParams);
        mImageView.setOnTouchListener(this);

        // Capture the width of the RelativeLayout once it is laid out.
        mRrootLayout.post(new Runnable() {
            @Override
            public void run() {
                windowwidth = mRrootLayout.getWidth();
                windowheight = mRrootLayout.getHeight();
            }
        });
    }

    // Tracks when we have reported that the image view is out of bounds so we
    // don't over report.
    private boolean isOutReported = false;

    public boolean onTouch(View view, MotionEvent event) {
        final int X = (int) event.getRawX();
        final int Y = (int) event.getRawY();

        // Check if the image view is out of the parent view and report it if it is.
        // Only report once the image goes out and don't stack toasts.
        if (isOut(view)) {
            if (!isOutReported) {
                isOutReported = true;
                Toast.makeText(this, "OUT", Toast.LENGTH_SHORT).show();
            }
        } else {
            isOutReported = false;
        }
        switch (event.getAction() & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_DOWN:
                // _xDelta and _yDelta record how far inside the view we have touched. These
                // values are used to compute new margins when the view is moved.
                _xDelta = X - view.getLeft();
                _yDelta = Y - view.getTop();
                break;
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_POINTER_DOWN:
            case MotionEvent.ACTION_POINTER_UP:
                // Do nothing
                break;
            case MotionEvent.ACTION_MOVE:
                RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) view
                    .getLayoutParams();
                // Image is centered to start, but we need to unhitch it to move it around.
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
                    lp.removeRule(RelativeLayout.CENTER_HORIZONTAL);
                    lp.removeRule(RelativeLayout.CENTER_VERTICAL);
                } else {
                    lp.addRule(RelativeLayout.CENTER_HORIZONTAL, 0);
                    lp.addRule(RelativeLayout.CENTER_VERTICAL, 0);
                }
                lp.leftMargin = X - _xDelta;
                lp.topMargin = Y - _yDelta;
                // Negative margins here ensure that we can move off the screen to the right
                // and on the bottom. Comment these lines out and you will see that
                // the image will be hemmed in on the right and bottom and will actually shrink.
                lp.rightMargin = view.getWidth() - lp.leftMargin - windowwidth;
                lp.bottomMargin = view.getHeight() - lp.topMargin - windowheight;
                view.setLayoutParams(lp);
                break;
        }
        // invalidate is redundant if layout params are set or not needed if they are not set.
//        mRrootLayout.invalidate();
        return true;
    }

    private boolean isOut(View view) {
        // Check to see if the view is out of bounds by calculating how many pixels
        // of the view must be out of bounds to and checking that at least that many
        // pixels are out.
        float percentageOut = 0.50f;
        int viewPctWidth = (int) (view.getWidth() * percentageOut);
        int viewPctHeight = (int) (view.getHeight() * percentageOut);

        return ((-view.getLeft() >= viewPctWidth) ||
            (view.getRight() - windowwidth) > viewPctWidth ||
            (-view.getTop() >= viewPctHeight) ||
            (view.getBottom() - windowheight) > viewPctHeight);
    }
}

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/root"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/im_move_zoom_rotate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:src="@drawable/circle" />

</RelativeLayout>
 Skizo-ozᴉʞS25 окт. 2017 г., 15:42
Да смотри мойXML LAYOUT, теперь он не двигается, потому что я помещаю его в середину экрана ... (хотя я хочу, чтобы он был в середине экрана), и я помещаю 250sp, но я бы хотел увеличить его ....
 Cheticamp25 окт. 2017 г., 16:06
@ Skizo-ozᴉʞS Код изменен, чтобы обеспечить первоначальное размещение в центре экрана. УвидетьremoveRule() заявления вonTouch(), Добавлен параметр для изменения процентного содержания изображения, которое должно быть «перед», прежде чем будет показан тост. ВидетьisOut().
 Skizo-ozᴉʞS25 окт. 2017 г., 15:09
Хорошие ответы и хорошо объяснил, я сделал это с моим ic_launcher, и он не работает на 100%, он говорит OUT, когда выходит из TOP / BOTTOM, но влево / вправо, он не работает на 100%, необходимо поставить layout_widht 150dp? не может быть wrap_content? у меня изображение будет почти такого же размера, но сейчас я тестирую его с помощью ic_launcher ....
 Cheticamp25 окт. 2017 г., 15:37
@ Skizo-ozᴉʞS Это любопытно. Это работает хорошо для меня, но наша среда должна отличаться. Можете ли вы опубликовать соответствующий макет XML, который вы используете, и описание вашего ic_launcher? Это просто стандартная иконка ic_launcher? Мне интересно, если ваше изображение не больше, чем кажется. Кстати, я обновил, как в коде установлены отрицательные поля. Смотрите обновленный ответ.
 Skizo-ozᴉʞS25 окт. 2017 г., 15:49
Смотри @Ceticamp, я использую этообраз Теперь, когда я вижу, что 75% - это слишком много, может ли это быть меньше? как 50% или чуть меньше? Я редактировалxml layout

я надеюсь, что это поможет вам: Итак, я определил эти атрибуты класса:

 private float xCoOrdinate, yCoOrdinate;
 private double screenCenterX, screenCenterY;

Затем я реализую этот код в методе OnCreate () действия:

 mRrootLayout.getBackground().setAlpha(255);

    /**
     * Calculate max hypo value and center of screen.
     */
    final DisplayMetrics display = getResources().getDisplayMetrics();
    screenCenterX = display.widthPixels / 2;
    screenCenterY = (display.heightPixels - getStatusBarHeight()) / 2;
    final double maxHypo = Math.hypot(screenCenterX, screenCenterY);

    mImageView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            /**
             * Calculate hypo value of current imageview position according to center
             */
            double centerYPos = mImageView.getY() + (mImageView.getHeight() / 2);
            double centerXPos = mImageView.getX() + (mImageView.getWidth() / 2);
            double a = screenCenterX - centerXPos;
            double b = screenCenterY - centerYPos;
            double hypo = Math.hypot(a, b);

            /**
             * change alpha of background of layout
             */
            alpha = (int) (hypo * 255) / (int) maxHypo;
            if (alpha < 255)
                mRrootLayout.getBackground().setAlpha(255 - alpha);

            switch (event.getActionMasked()) {
                case MotionEvent.ACTION_DOWN:
                    xCoOrdinate = mImageView.getX() - event.getRawX();
                    yCoOrdinate = mImageView.getY() - event.getRawY();
                    break;
                case MotionEvent.ACTION_MOVE:
                    mImageView.animate().x(event.getRawX() + xCoOrdinate).y(event.getRawY() + yCoOrdinate).setDuration(0).start();
                    break;
                case MotionEvent.ACTION_UP:
                     if (alpha > 50) {
                        Toast.makeText(ImageViewerActivity.this, "Out", Toast.LENGTH_SHORT).show();
                        return false;
                    } else {
                        Toast.makeText(ImageViewerActivity.this, "In", Toast.LENGTH_SHORT).show();
                        mImageView.animate().x(0).y((float) screenCenterY - mImageView.getHeight() / 2).setDuration(100).start();
                        mRrootLayout.getBackground().setAlpha(255);
                    }
                default:
                    return false;
            }
            return true;
        }
    });
 Skizo-ozᴉʞS23 окт. 2017 г., 19:17
Ну, 50% изображения было случайным числом, но да, сегодня вечером я сделаю тест и дам вам знать, но его нельзя поймать на action_move?
 Skizo-ozᴉʞS23 окт. 2017 г., 12:46
Нмм, не могли бы вы поставить простой тост вместо анимации? Я имею в виду, если вы собираетесь вытащить из устройства тост (когда изображение около 50% выходит за пределы экрана)?
 Imene Noomene23 окт. 2017 г., 19:01
Я добавил для вас тосты сестренка. Попробуйте, и если у вас есть вопрос, не стесняйтесь спрашивать меня
 Skizo-ozᴉʞS23 окт. 2017 г., 21:04
Я проверил это и кажется, что это не работает, какgetStatusBarHeight() метод я получил это из этого вопроса, все в порядке? Это действительно говорит, если я нахожусь на середине экрана
 Imene Noomene23 окт. 2017 г., 19:06
PS: тосты будут отображаться при вызове ACTION_UP и отображать «Out», если вы находитесь на 50% за пределами экрана, и «in», если вы все еще на 50% за экранным

Обновить

Добавьте правое / нижнее поле на шаге 3, чтобы предотвратить увеличение изображения. Вы можете увидеть, если вы не измените правое / нижнее поле, изображение будет увеличено относительным расположением.

getMeasuredHeight / Width избежатьMATCH_PARENT а такжеWRAP_CONTENT.Если есть панель инструментов / панель действий, тоtopMargin + height > relativeLayout's height также относится к определению вне дна.

состояние записиout of bound Избегайте появления тостов.

public class MainActivity extends AppCompatActivity implements View.OnTouchListener {

    Point lastPoint = new Point();
    RelativeLayout relativeLayout;

    boolean lastOutOfTop = false;
    boolean lastOutOfLeft = false;
    boolean lastOutOfRight = false;
    boolean lastOutOfBottom = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        (findViewById(R.id.imageView)).setOnTouchListener(this);
        relativeLayout = (RelativeLayout)findViewById(R.id.relativeLayout);
    }

    @Override
    public boolean onTouch(View view, MotionEvent event) {
        //1. user's finger
        final Point point = new Point((int) event.getRawX(), (int) event.getRawY());

        switch (event.getAction() & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_DOWN:
                // 2. record the last touch point
                lastPoint = point;
                break;
            case MotionEvent.ACTION_UP:
                break;
            case MotionEvent.ACTION_POINTER_DOWN:
                break;
            case MotionEvent.ACTION_POINTER_UP:
                break;
            case MotionEvent.ACTION_MOVE:
                // 3. get the move offset
                final Point offset = new Point(point.x-lastPoint.x, point.y-lastPoint.y);
                RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view
                        .getLayoutParams();
                layoutParams.leftMargin += offset.x;
                layoutParams.topMargin += offset.y;
                // * also check right/bottom Margin
                layoutParams.rightMargin = relativeLayout.getMeasuredWidth() - layoutParams.leftMargin+view.getMeasuredWidth();
                layoutParams.bottomMargin = relativeLayout.getMeasuredHeight() - layoutParams.topMargin+view.getMeasuredHeight();
                view.setLayoutParams(layoutParams);
                // 4. record the last touch point
                lastPoint = point;
                break;
        }

        // 5. check bounds
        RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) view.getLayoutParams();
        boolean outOfTop = layoutParams.topMargin < 0;
        boolean outOfLeft = layoutParams.leftMargin < 0;
        boolean outOfBottom = layoutParams.topMargin+view.getMeasuredHeight() > relativeLayout.getMeasuredHeight();
        boolean outOfRight = layoutParams.leftMargin+view.getMeasuredWidth() > relativeLayout.getMeasuredWidth();

        // 6. if out of bound
        if (outOfLeft&&!lastOutOfLeft) Toast.makeText(this, "OUT Left", Toast.LENGTH_SHORT).show();
        if (outOfTop&&!lastOutOfTop) Toast.makeText(this, "OUT Top", Toast.LENGTH_SHORT).show();
        if (outOfBottom&&lastOutOfBottom) Toast.makeText(this, "OUT Bottom", Toast.LENGTH_SHORT).show();
        if (outOfRight&&lastOutOfRight)  Toast.makeText(this, "OUT Right", Toast.LENGTH_SHORT).show();

        // 7. record
        lastOutOfTop = outOfTop;
        lastOutOfLeft = outOfLeft;
        lastOutOfBottom = outOfBottom;
        lastOutOfRight = outOfRight;
        return true;
    }
}
 Codus24 окт. 2017 г., 20:00
Да, тост подсказал за границей. Мой пример только один раз, когда граница превышена
 Skizo-ozᴉʞS24 окт. 2017 г., 20:17
Я протестирую int примерно через 1 час и дам вам знать ^^
 Skizo-ozᴉʞS24 окт. 2017 г., 19:53
Я сказал тост, чтобы сообщить мне, когда я выхожу из экрана
 Codus26 окт. 2017 г., 01:55
Да, если мы не изменим левое / нижнее поле, изображение будет увеличиваться или уменьшаться. Я обновил свой ответ предварительным просмотром результатов.
 Skizo-ozᴉʞS25 окт. 2017 г., 15:36
Я проверил это, и я не понимаю, почему, если я перетаскиваю его вправо, оно уменьшается, я пробовал это с другим изображением (более маленьким) и кажется, что это работает, но когда я помещаю свое реальное изображение, это увеличивает / уменьшает масштаб изображения всякий раз, когда я пытаюсь переместить изображение. Может потому что он слишком большой?

View.OnDragListener, УвидетьПеретаскивания руководство.

Смотрите также дополнительноDraggablePanel проект, если вы хотите изучить, как это можно сделать.

 Y.S.24 окт. 2017 г., 07:29
@ Skizo-ozᴉʞS: Извините за задержку, друг. Посмотрим на это как можно скорее.
 Skizo-ozᴉʞS17 окт. 2017 г., 16:17
Я отредактировал мой вопрос с моим текущим кодом, не могли бы вы помочь мне в том, что я спрашиваю?
 Skizo-ozᴉʞS23 окт. 2017 г., 12:37
ты изучал мой случай?
 Skizo-ozᴉʞS23 окт. 2017 г., 13:47
Да, Ю.С. Я сделал это, конечно, но когда я попробую пример, он не двигается вот примеркод
 Skizo-ozᴉʞS17 окт. 2017 г., 16:02
Я попробовал последний пример, но как я могу определить, когда представление собирается «покинуть» устройство? Также у меня есть это на ConstraintLayout, это повлияет на это? Я пытаюсь этопример ты думаешь это нормально? Кроме того, как я могу определить, выходит ли оно из устройства? Я думал сравнить X и Y с высотой окна и шириной окна

как переместить все представления, содержащиеся в RelativeLayout, с помощью onTouch. Надеюсь, это поможет:

public class MainActivity extends AppCompatActivity implements View.OnTouchListener {
    private RelativeLayout mRelLay;
    private float mInitialX, mInitialY;
    private int mInitialLeft, mInitialTop;
    private View mMovingView = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mRelLay = (RelativeLayout) findViewById(R.id.relativeLayout);

        for (int i = 0; i < mRelLay.getChildCount(); i++)
            mRelLay.getChildAt(i).setOnTouchListener(this);
    }

    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        RelativeLayout.LayoutParams mLayoutParams;

        switch (motionEvent.getAction()) {
            case MotionEvent.ACTION_DOWN:
                mMovingView = view;
                mLayoutParams = (RelativeLayout.LayoutParams) mMovingView.getLayoutParams();
                mInitialX = motionEvent.getRawX();
                mInitialY = motionEvent.getRawY();
                mInitialLeft = mLayoutParams.leftMargin;
                mInitialTop = mLayoutParams.topMargin;
                break;

            case MotionEvent.ACTION_MOVE:
                if (mMovingView != null) {
                    mLayoutParams = (RelativeLayout.LayoutParams) mMovingView.getLayoutParams();
                    mLayoutParams.leftMargin = (int) (mInitialLeft + motionEvent.getRawX() - mInitialX);
                    mLayoutParams.topMargin = (int) (mInitialTop + motionEvent.getRawY() - mInitialY);
                    mMovingView.setLayoutParams(mLayoutParams);
                }
                break;

            case MotionEvent.ACTION_UP:
                mMovingView = null;
                break;
        }

        return true;
    }
}
 Lluis Felisart24 окт. 2017 г., 12:36
Тогда вам следует ограничить добавление движения в ACTION_MOVE примерно так: if (topMargin <0) topMargin = 0; и если (topMargin + height> windowheight) topMargin = windowheight - высота; и то же самое для левого поля и ширины.
 Skizo-ozᴉʞS23 окт. 2017 г., 12:41
кажется, что это работает, но похоже, что слева это не обнаруживает, верно? Я хотел бы получить тост или что-то, когда пользователь пытается переместить изображение с устройства. TOP / DOWN / RIGHT / LEFT Вы меня поняли?
 Skizo-ozᴉʞS24 окт. 2017 г., 12:39
Не могли бы вы сделать образец этого, чтобы я мог проверить и одобрить его?

Вы можете достичь этого с помощью этого кода.

DisplayMetrics metrics = getResources().getDisplayMetrics();
int windowWidth = metrics.widthPixels;
int windowHeight = metrics.heightPixels;

Теперь в вашем методе onTouch вычислите, превышает ли целевое местоположение вышеуказанные размеры.

if (currentXLocation + deltaX> windowWidth) {

// this will ensure that target location 
// is always <= windowHeight
deltaX = windowWidth - currentXLocation; 

} else if( currentXLocation + deltaX < 0){

deltaX = -(currentXLocation);

} else if (...){

// perform similar calculations for the rest 

}
 Abdul Ahad20 окт. 2017 г., 13:09
Братан, это код, который решил мою проблему, если вы хотите образец, дайте мне знать, я сделаю вам один :)
 Skizo-ozᴉʞS20 окт. 2017 г., 13:07
Копировать один и тот же ответ бесполезно, поэтому, если вы добавили ответ и не хотите, чтобы его голосовали, протестируйте его в примере проекта и опубликуйте свой реальный код.
 Skizo-ozᴉʞS20 окт. 2017 г., 13:19
Мне проще это проверить, да.

Ваш ответ на вопрос