如何将图像移动到 x、y 坐标与当前比例和填充的位置
How to move Image to position x, y coordinate with current scale and padding
我在我的项目中使用 Photoview 库。我需要在带缩放的 Imageview 中 setPadding。
当我使用 左填充和上填充 时,它工作得很好。它还可以根据需要从左侧和顶部移动图像。
mPhotoView.setPadding(150, 150, 0, 0);
但是,当我应用 right padding 和 bottom padding 时,它会应用 padding 但不会自动从当前位置移动。
mPhotoView.setPadding(0, 0, 150, 150); //Issue here.
你需要使用约束,把它放在一个ConstraintLayout
中,然后将边缘设置为0,或者将约束设置为你希望它不移动的程度。
您可以使用父布局(LinearLayout
或 FramLayout
)应用填充并将 ImageView
放入其中,以便其根据您的要求工作。
或
您可以使用ScaleType
属性,这样可以顺利管理。
您需要在 mPhotoView
中设置填充后使用 requestLayout()
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>
Activity Code
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 FItXY scaletype. When I apply your code , Not working. same result. It can't move automatic as left padding.
实际上你的 padding Right 和 Bottom 是有效的
设置填充后,您需要滚动 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);
}
}
我在我的项目中使用 Photoview 库。我需要在带缩放的 Imageview 中 setPadding。
当我使用 左填充和上填充 时,它工作得很好。它还可以根据需要从左侧和顶部移动图像。
mPhotoView.setPadding(150, 150, 0, 0);
但是,当我应用 right padding 和 bottom padding 时,它会应用 padding 但不会自动从当前位置移动。
mPhotoView.setPadding(0, 0, 150, 150); //Issue here.
你需要使用约束,把它放在一个ConstraintLayout
中,然后将边缘设置为0,或者将约束设置为你希望它不移动的程度。
您可以使用父布局(LinearLayout
或 FramLayout
)应用填充并将 ImageView
放入其中,以便其根据您的要求工作。
或
您可以使用ScaleType
属性,这样可以顺利管理。
您需要在 mPhotoView
requestLayout()
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>
Activity Code
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 FItXY scaletype. When I apply your code , Not working. same result. It can't move automatic as left padding.
实际上你的 padding Right 和 Bottom 是有效的
设置填充后,您需要滚动 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);
}
}