Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在ImageView上的接触点绘制圆_Java_Android_View_Imageview - Fatal编程技术网

Java 在ImageView上的接触点绘制圆

Java 在ImageView上的接触点绘制圆,java,android,view,imageview,Java,Android,View,Imageview,我试图在ImageView的接触点上画圆圈,但它在左上角画 我的代码是 ImageView imageView; private static int RESULT_LOAD_IMAGE = 1; Bitmap bmp; float touchY; float touchX; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(s

我试图在
ImageView
的接触点上画圆圈,但它在左上角画

我的代码是

ImageView imageView;
    private static int RESULT_LOAD_IMAGE = 1;
    Bitmap bmp;
    float touchY;
    float touchX;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = (ImageView) findViewById(R.id.imageView1);
        imageView.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    touchX = event.getX();
                    touchY = event.getY();
                    imageView.setImageBitmap(drawCircle());
                    break;

                default:
                    break;
                }


                return false;
            }
        });
    }

    private Bitmap drawCircle() {
        Bitmap bitmap = bmp.copy(Bitmap.Config.ARGB_4444, true);
        bitmap.setPixel(imageView.getWidth(), imageView.getHeight(), 0);
        Canvas canvas = new Canvas(bitmap);
        Paint paint = new Paint();
        paint.setStyle(Paint.Style.STROKE);
        paint.setColor(Color.RED);
        canvas.drawCircle(touchX, touchY, 100, paint);
        return bitmap;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.getimage:
            pickImage();
            break;

        default:
            break;
        }
        return super.onOptionsItemSelected(item);
    }

    private void pickImage() {
        Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        startActivityForResult(intent, RESULT_LOAD_IMAGE);

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && data != null){
            Uri uri = data.getData();
            String[] filePath = {MediaStore.Images.Media.DATA};
            Cursor cursor = getContentResolver().query(uri, filePath, null, null, null);
            cursor.moveToFirst();
            int columnIndex = cursor.getColumnIndex(filePath[0]);
            String picturePath = cursor.getString(columnIndex);
            cursor.close();
            bmp = BitmapFactory.decodeFile(picturePath);
            imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
        }
    }
而xml是

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/ic_launcher" />

</RelativeLayout>


我不明白什么是错的。我想在接触点画一个圆。任何帮助都将不胜感激

如果要创建一个具有ImageView大小的新位图,此代码可以正常工作


但是,“bmp”位图可能比ImageView大得多,并且可以缩放。这就是为什么会得到扭曲的结果。

如果要创建一个具有ImageView大小的新位图,此代码可以正常工作

但是,“bmp”位图可能比ImageView大得多,并且可以缩放。这就是为什么你会得到扭曲的结果