如何在 ImageView 上生成随机矩形
How to generate Random rectangle on ImageView
我想生成大小相同但在 ImageView 上随机位置的矩形。当我点击按钮时,矩形的位置必须改变
我附上了整个Activity。首先,我从图库中打开一张图片并在其上绘制一个矩形。单击随机播放按钮时,它必须移动
public class Register extends Activity {
ImageView img;
String picpath;
Bitmap bmp;
Canvas cnvs;
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.register);
img=(ImageView)findViewById(R.id.imageView1);
//Open Button
Button open=(Button)findViewById(R.id.button3);
open.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);
}
});
Button shuffle=(Button)findViewById(R.id.button2);
shuffle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int height=img.getHeight();
int width=img.getWidth();
int x;
int y;
Random r=new Random();
x=r.nextInt(width)*width;
y=r.nextInt(height)*height;
Paint paint=new Paint();
cnvs.drawBitmap(BitmapFactory.decodeFile(picpath), 0, 0, null);
cnvs.drawRect(x, y,x+50,y+50 , paint);
img.setImageBitmap(bmp);
}
});
}
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);
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]);
picpath=cur.getString(colIndex);
cur.close();
cnvs.drawBitmap(BitmapFactory.decodeFile(picpath), 0, 0, null);
cnvs.drawRect(20, 20,50,50 , paint);
img.setImageBitmap(bmp);
//cnvs.drawRect(20, 20,50,50 , paint);
}
}
}
请考虑这个:
//drawRect(左浮,上浮,右浮,下浮,Paint画图)
在你的情况下,它永远不会改变位置,因为它的起点总是相同的,你也需要改变它。我认为这是你在 X,and Y 中得到错误值的情况。还尝试将范围提供给随机生成器,例如 1 到 60
您可以简单地更改 X 和 Y 的值,例如
x=r.nextInt(宽度);
y=r.nextInt(身高);
但要确保它不应该超出位图的范围
x=r.nextInt(width) 已经给你 0 <= x < width,所以你不应该再乘以宽度。
y 和高度相同。
还有,你的cnvs是从哪里来的?我不确定您是否可以在 onClick 中仅在 ImageView 上绘制。我会制作一个自定义 ImageView,它会记住矩形应该在哪里并在其 onDraw 方法中绘制它,然后在 onClick 方法期间,我会更改存储矩形位置的变量并强制重绘(因此 onDraw 将绘制新位置的矩形)。
将 Random r 创建为 class 成员并在 onCreate() 方法中对其进行初始化,而不是在 onClick()
中将其初始化为 Random r=new Random()
我想生成大小相同但在 ImageView 上随机位置的矩形。当我点击按钮时,矩形的位置必须改变
我附上了整个Activity。首先,我从图库中打开一张图片并在其上绘制一个矩形。单击随机播放按钮时,它必须移动
public class Register extends Activity {
ImageView img;
String picpath;
Bitmap bmp;
Canvas cnvs;
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.register);
img=(ImageView)findViewById(R.id.imageView1);
//Open Button
Button open=(Button)findViewById(R.id.button3);
open.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);
}
});
Button shuffle=(Button)findViewById(R.id.button2);
shuffle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
int height=img.getHeight();
int width=img.getWidth();
int x;
int y;
Random r=new Random();
x=r.nextInt(width)*width;
y=r.nextInt(height)*height;
Paint paint=new Paint();
cnvs.drawBitmap(BitmapFactory.decodeFile(picpath), 0, 0, null);
cnvs.drawRect(x, y,x+50,y+50 , paint);
img.setImageBitmap(bmp);
}
});
}
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);
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]);
picpath=cur.getString(colIndex);
cur.close();
cnvs.drawBitmap(BitmapFactory.decodeFile(picpath), 0, 0, null);
cnvs.drawRect(20, 20,50,50 , paint);
img.setImageBitmap(bmp);
//cnvs.drawRect(20, 20,50,50 , paint);
}
}
}
请考虑这个:
//drawRect(左浮,上浮,右浮,下浮,Paint画图)
在你的情况下,它永远不会改变位置,因为它的起点总是相同的,你也需要改变它。我认为这是你在 X,and Y 中得到错误值的情况。还尝试将范围提供给随机生成器,例如 1 到 60
您可以简单地更改 X 和 Y 的值,例如 x=r.nextInt(宽度); y=r.nextInt(身高); 但要确保它不应该超出位图的范围
x=r.nextInt(width) 已经给你 0 <= x < width,所以你不应该再乘以宽度。
y 和高度相同。
还有,你的cnvs是从哪里来的?我不确定您是否可以在 onClick 中仅在 ImageView 上绘制。我会制作一个自定义 ImageView,它会记住矩形应该在哪里并在其 onDraw 方法中绘制它,然后在 onClick 方法期间,我会更改存储矩形位置的变量并强制重绘(因此 onDraw 将绘制新位置的矩形)。
将 Random r 创建为 class 成员并在 onCreate() 方法中对其进行初始化,而不是在 onClick()
中将其初始化为 Random r=new Random()