如何在ImageView中的Image Bitmap上画一个矩形
How to draw a rectangle on Image Bitmap in ImageView
我是编程新手Android。
我正在尝试从 phone 的图库中打开一张图片,然后在我打开的图片上方绘制一个矩形。但是我可以打开图像,但看不到矩形。我正在使用 ImageView 和 Canvas 打开图像并绘制。我创建了一个按钮并用于从图库中获取图像。我已经编写了打开和绘制 onActiviesult() method.Could 的代码,有人帮助我吗?!。提前致谢
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);
}
}
尝试在 canvas 上绘制位图,然后仅调用一次 setImageBitmap
。此时您正在覆盖 ImageView
的内容。删除 img.setImageBitmap(BitmapFactory.decodeFile(picPath));
和
cnvs.drawBitmap(BitmapFactory.decodeFile(picPath), 0, 0, null);
cnvs.drawRect(20, 20,50,50 , paint);
img.setImageBitmap(bmp);
我不确定绘图顺序。如果您没有看到矩形,请尝试更改 drawRect
和 drawBitmap
的顺序
你可以试试我用的这种方式:
创建 customborder.xml 个文件。
只需在布局中使用 imageview 并制作边框 xml 文件
现在在布局后瓜中使用此自定义边框,例如:
android:layout_height="fill_parent"
android:background="@drawable/customborder">
我是编程新手Android。 我正在尝试从 phone 的图库中打开一张图片,然后在我打开的图片上方绘制一个矩形。但是我可以打开图像,但看不到矩形。我正在使用 ImageView 和 Canvas 打开图像并绘制。我创建了一个按钮并用于从图库中获取图像。我已经编写了打开和绘制 onActiviesult() method.Could 的代码,有人帮助我吗?!。提前致谢
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);
}
}
尝试在 canvas 上绘制位图,然后仅调用一次 setImageBitmap
。此时您正在覆盖 ImageView
的内容。删除 img.setImageBitmap(BitmapFactory.decodeFile(picPath));
和
cnvs.drawBitmap(BitmapFactory.decodeFile(picPath), 0, 0, null);
cnvs.drawRect(20, 20,50,50 , paint);
img.setImageBitmap(bmp);
我不确定绘图顺序。如果您没有看到矩形,请尝试更改 drawRect
和 drawBitmap
你可以试试我用的这种方式: 创建 customborder.xml 个文件。
只需在布局中使用 imageview 并制作边框 xml 文件
现在在布局后瓜中使用此自定义边框,例如:
android:layout_height="fill_parent"
android:background="@drawable/customborder">