Android 如何在ImageView中的图像位图上绘制矩形

Android 如何在ImageView中的图像位图上绘制矩形,android,bitmap,imageview,Android,Bitmap,Imageview,我是新的安卓编程。 我试图打开手机图库中的图像,并在已打开的图像顶部绘制一个矩形。但是我可以打开图像,但是我看不到矩形。我正在使用ImageView和Canvas打开图像并绘制。我已经创建了一个按钮,并用于从画廊图像。我已经编写了打开并在activiesult()方法中绘图的代码。有人能帮我吗?!。提前谢谢 public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle

我是新的安卓编程。 我试图打开手机图库中的图像,并在已打开的图像顶部绘制一个矩形。但是我可以打开图像,但是我看不到矩形。我正在使用ImageView和Canvas打开图像并绘制。我已经创建了一个按钮,并用于从画廊图像。我已经编写了打开并在activiesult()方法中绘图的代码。有人能帮我吗?!。提前谢谢

public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button gal=(Button)findViewById(R.id.button1);
    gal.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent gal_open=new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            startActivityForResult(gal_open,1);
        }
    });
}

public void onActivityResult(int requestCode,int resultCode,Intent intentData){
    super.onActivityResult(requestCode, resultCode, intentData);
    if(requestCode==1 && resultCode==RESULT_OK && intentData!=null){
        ImageView img=(ImageView)findViewById(R.id.imageView1 );

        Bitmap bmp=Bitmap.createBitmap(img.getHeight(),img.getWidth(),Bitmap.Config.RGB_565);
        Canvas cnvs=new Canvas(bmp);
        //img.setImageBitmap(bmp);

        Paint paint=new Paint();
        paint.setColor(Color.RED);

        Uri data=intentData.getData();
        String[] filePath={MediaStore.Images.Media.DATA};
        Cursor cur=getContentResolver().query(data,filePath,null,null,null );
        cur.moveToFirst();
        int colIndex=cur.getColumnIndex(filePath[0]);
        String picPath=cur.getString(colIndex);
        cur.close();
        cnvs.drawRect(20, 20,50,50 , paint);


        img.setImageBitmap(bmp);
        img.setImageBitmap(BitmapFactory.decodeFile(picPath));
    }   
}



        return super.onOptionsItemSelected(item);
}

}

尝试在画布上绘制位图,然后只调用一次
setImageBitmap
。此时,您正在覆盖
ImageView
的内容。移除
img.setImageBitmap(BitmapFactory.decodeFile(picPath))


我不确定绘图顺序是否正确。如果看不到矩形,请尝试更改
drawRect
drawBitmap

的顺序,您可以尝试以下方法: 创建customborder.xml文件

只需在布局中拍摄imageview,并创建边框xml文件

现在在布局Backgord中使用此customborder,如下所示:

cnvs.drawBitmap(BitmapFactory.decodeFile(picPath), 0, 0, null);
cnvs.drawRect(20, 20,50,50 , paint);
img.setImageBitmap(bmp);
android:layout_height="fill_parent"

android:background="@drawable/customborder">