如何在ImageView上生成随机矩形

时间:2015-03-19 14:10:36

标签: android imageview

我想生成相同大小但在ImageView上随机位置的Rectangle。当我单击按钮时,矩形的位置必须改变

我附上了整个活动。首先,我从图库中打开一个图像并在其上绘制一个矩形。单击随机按钮时,必须移动

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);



    }   

}

}

3 个答案:

答案 0 :(得分:0)

请考虑一下:

// drawRect(向左浮动,浮动顶部,向右浮动,浮动底部,油漆)

在你的情况下,它永远不会改变位置,因为它的起点始终是相同的,你也需要改变它。我认为这是你在X和Y中得到错误值的情况。同时尝试将范围赋予Random生成器,如1到60

您可以简单地更改X和Y的值  X = r.nextInt(宽度);     Y = r.nextInt(高度); 但要确保它不应超出位图的范围

答案 1 :(得分:0)

x = r.nextInt(width)已经给你0< = x<宽度,所以你不应该再按宽度乘以它。

y和身高相同。

另外,你的cnv来自哪里?我不确定你是否可以在onClick上绘制你的ImageView。我会做一个自定义的ImageView来记住矩形应该在哪里并在其onDraw方法中绘制它,然后在onClick方法中,我会改变存储矩形位置的变量并强制重绘(所以onDraw将绘制新位置的矩形)。

答案 2 :(得分:0)

创建Random r作为类成员并在onCreate()方法中初始化它而不是在onClick()

中的Random r = new Random()