我一直在这个位置按照教程创建一个Android图片视图,允许用户平移图像和缩放缩放:
http://www.northborder-software.com/pinchzoom_and_pan_5.html
它要求用户手机上的图像使用,但我修改了它以使用我在可绘制文件夹中提供的特定图像:
public class MainActivity extends AppCompatActivity {
private static final int MY_PERMISSION_REQUEST_READ_EXTERNAL_STORAGE = 101;
private static final int RESULT_LOAD_IMAGE = 1;
private Button getImage;
protected PinchZoomPan pinchZoomPan;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pinchZoomPan = (PinchZoomPan) findViewById(R.id.ivImage);
askForRuntimePermission();
Uri selectedImage = Uri.parse("android.resource://com.nbstutorials.pinchzoompan/drawable/map2");
pinchZoomPan.loadImageOnCanvas(selectedImage);
}
private void askForRuntimePermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, MY_PERMISSION_REQUEST_READ_EXTERNAL_STORAGE);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case MY_PERMISSION_REQUEST_READ_EXTERNAL_STORAGE:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//permission is granted do nothing in this case
} else {
//permission denied
Toast.makeText(getApplicationContext(), "this app requires permission to read external storage", Toast.LENGTH_SHORT).show();
finish();
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Uri selectedImage = Uri.parse("android.resource://com.nbstutorials.pinchzoompan/drawable/map2");
pinchZoomPan.loadImageOnCanvas(selectedImage);
}
}
这很有效,但是当我尝试在 PinchZoomPan.java 方法onDraw
中绘制一条线时,它并没有按照我想要的方式工作。这就是:
它在图像上绘制线条。这条线保持静止;如果我在最初加载时将其绘制在图像的上角,并且我远离它所在的位置,那么该线就不会留在角落里。我相信问题是画布位于图像的顶部,当画布保持静止时,图像在其下方平移。
我该如何解决这个问题?我希望能够在图像本身的某个位置绘制一条线,并且平移和缩放也会影响线条。我想知道是否有一种方法可以创建/解析新图像并在其上绘制必要的线条,然后将 图像加载到查看器中?
另外,我并不依赖这种方法。如果存在一个可以更好地用于我的目的,请告诉我。
谢谢。