Как переместить изображение в координаты x, y с текущим масштабом и отступом - PullRequest
0 голосов
/ 22 ноября 2018

Я использую Photoview Библиотека в моем проекте.Мне нужно setPadding в Imageview с Zoom.

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

mPhotoView.setPadding(150, 150, 0, 0);

image with left padding

Но, когда я применяю правый отступ и нижний отступ , применяется отступ, но не смещается автоматически с текущего места.

mPhotoView.setPadding(0, 0, 150, 150);     //Issue here.

Image with right padding

Ответы [ 3 ]

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

Вы можете использовать Родительский макет (LinearLayout или FramLayout), чтобы применить ваш отступ и поместить в него свой ImageView, чтобы он работал в соответствии с вашими требованиями.

ИЛИ

Вы можете использовать свойство ScaleType, чтобы им было легко управлять.

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

Вам необходимо использовать requestLayout() после установки заполнения в вашем mPhotoView

public void requestLayout ()

  • Вызывайте это, когда что-то изменилось, что сделало недействительным макет этого представления. Это запланирует проход макета дерева представления.Это не должно вызываться, пока иерархия представления находится в данный момент на этапе макета (isInLayout (). Если макет происходит, запрос может быть выполнен в конце текущего этапа макета (и затем макет будет выполнен снова) или после текущегорисуется рамка и появляется следующая раскладка.

ОБРАЗЕЦ КОДА

<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorAccent">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerInParent="true"
        android:onClick="ClickMe3"
        android:text="Remove Padding " />

    <com.github.chrisbanes.photoview.PhotoView
        android:id="@+id/photo_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentBottom="true"
        android:onClick="ClickMe"
        android:text="left and top " />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentBottom="true"
        android:onClick="ClickMe2"
        android:text="right and bottom " />


</RelativeLayout>

Код активности

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;


import com.github.chrisbanes.photoview.PhotoView;

public class MainActivity extends AppCompatActivity {

    PhotoView mPhotoView;
    boolean flag = true;

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

        mPhotoView = (PhotoView) findViewById(R.id.photo_view);
        mPhotoView.setImageResource(R.drawable.dishu);

    }

    public void ClickMe(View view) {

        mPhotoView.setPadding(150, 150, 0, 0);
        mPhotoView.requestLayout();

    }

    public void ClickMe2(View view) {

        mPhotoView.setPadding(0, 0, 150, 150);
        mPhotoView.requestLayout();
    }

    public void ClickMe3(View view) {

        mPhotoView.setPadding(0, 0, 0, 0);
        mPhotoView.requestLayout();

    }


}

Пожалуйста, проверьте вывод кода выше https://www.youtube.com/watch?v=828XI6ydNdY

ОБНОВЛЕНИЕ

согласно вашему комментарию ниже

My ImageView with FItXYscaletype. Когда я применяю ваш код, Не работает. Тот же результат. Он не может двигаться автоматически, как отступ слева.

На самом деле ваш отступ справа и снизу работает после установки заполнения, вам нужно прокрутить mPhotoView

Как показано ниже код

public class MainActivity extends AppCompatActivity {

    PhotoView mPhotoView;
    RelativeLayout rootView;

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

        rootView =  findViewById(R.id.rootView);
        mPhotoView = (PhotoView) findViewById(R.id.photo_view);

        mPhotoView.setImageResource(R.drawable.dishu);
    }

    public void Left_Top(View view) {
        mPhotoView.setPadding(150, 150, 0, 0);
        mPhotoView.requestLayout();
    }

    public void Right_Bottom(View view) {
        mPhotoView.setPadding(0, 0, 150, 150);
        mPhotoView.requestLayout();
        // after setting padding scroll your mPhotoView to bottom
        mPhotoView.scrollTo(150,150);
    }

    public void ClickMe3(View view) {
        mPhotoView.setPadding(0, 0, 0, 0);
        mPhotoView.requestLayout();
        mPhotoView.scrollTo(0,0);
    }


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

Вам нужно использовать ограничения, поместить их в ConstraintLayout, а затем установить края на 0 или установить ограничение, на которое вы хотите, чтобы оно не сдвигалось.

https://medium.com/@eugenebrusov/using-of-constraintlayout-to-set-your-imageview-in-16-9-ratio-9979d53ba976

...