Java Android:如何创建具有缩放平移和缩放功能的画布?

Java Android:如何创建具有缩放平移和缩放功能的画布?,java,android,canvas,imageview,Java,Android,Canvas,Imageview,我一直在这个位置遵循教程,创建一个Android图像视图,允许用户平移图像,并通过按压来缩放: 它要求用户使用手机上的图像,但我对其进行了修改,以使用我在drawable文件夹中提供的特定图像: public class MainActivity extends AppCompatActivity { private static final int MY_PERMISSION_REQUEST_READ_EXTERNAL_STORAGE = 101; private static final

我一直在这个位置遵循教程,创建一个Android图像视图,允许用户平移图像,并通过按压来缩放:

它要求用户使用手机上的图像,但我对其进行了修改,以使用我在drawable文件夹中提供的特定图像:

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
中画一条线时,它并没有按照我希望的方式工作。情况就是这样:

它在图像上画了一条线。线路保持静止;如果我在最初加载时在图像的上角绘制它,并从它所在的位置平移,则线不会停留在角上。我认为问题在于画布位于图像上方,图像在其下方平移,而画布保持静止

我该如何解决这个问题?我希望能够在图像本身的某个点上画一条线,并且平移和缩放也会影响线。我想知道是否有一种方法可以创建/解析一个新图像,并在其上绘制必要的线条,然后将该图像加载到查看器中

而且,我不喜欢这种方法。如果有一个能更好地满足我的需求,请告诉我

多谢各位