Java Android:如何创建具有缩放平移和缩放功能的画布?
我一直在这个位置遵循教程,创建一个Android图像视图,允许用户平移图像,并通过按压来缩放: 它要求用户使用手机上的图像,但我对其进行了修改,以使用我在drawable文件夹中提供的特定图像: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
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
中画一条线时,它并没有按照我希望的方式工作。情况就是这样:
它在图像上画了一条线。线路保持静止;如果我在最初加载时在图像的上角绘制它,并从它所在的位置平移,则线不会停留在角上。我认为问题在于画布位于图像上方,图像在其下方平移,而画布保持静止
我该如何解决这个问题?我希望能够在图像本身的某个点上画一条线,并且平移和缩放也会影响线。我想知道是否有一种方法可以创建/解析一个新图像,并在其上绘制必要的线条,然后将该图像加载到查看器中
而且,我不喜欢这种方法。如果有一个能更好地满足我的需求,请告诉我
多谢各位