2012-08-05 3 views
2

Je suis un débutant dans android et je fais une application simple dans laquelle je sélectionne une image de la galerie, un rectangle est dessiné sur l'image que l'utilisateur peut faites glisser à n'importe quelle position sur l'image et redimensionnez dynamiquement le rectangle.Comment faire une forme dragable et redimensionnable en android dynamiquement

Mon code jusqu'à maintenant peut charger une image de la galerie et dessiner un rectangle sur l'image. Mais je ne sais pas comment faire pour que le rectangle soit dragable dynamiquement.

public class MainActivity extends Activity { 
private static int RESULT_LOAD_IMAGE = 1; 


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

    Button buttonLoadImage = (Button) findViewById(R.id.buttonLoadPicture); 
    buttonLoadImage.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View arg0) { 

      Intent i = new Intent(
        Intent.ACTION_PICK, 
        android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 

      startActivityForResult(i, 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 && null != data) { 
     Uri selectedImage = data.getData(); 
     String[] filePathColumn = { MediaStore.Images.Media.DATA }; 

     Cursor cursor = getContentResolver().query(selectedImage, 
       filePathColumn, null, null, null); 
     cursor.moveToFirst(); 

     int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
     String picturePath = cursor.getString(columnIndex); 
     cursor.close(); 

     ImageView imageView = (ImageView) findViewById(R.id.imgView); 
     Bitmap bMap = BitmapFactory.decodeFile(picturePath); 

     bMap = bMap.copy(Bitmap.Config.ARGB_8888 , true); 

     float width = imageView.getWidth(); 
     float height = imageView.getHeight(); 

     Canvas canvas = new Canvas(bMap); 
     Paint paint = new Paint(); 
     paint.setAntiAlias(true); 
     paint.setStyle(Paint.Style.STROKE); 
     paint.setStrokeWidth(4); 
     paint.setColor(Color.RED); 
     canvas.drawRect(width/2+60, height/2-20, width/2-60, height/2+20, paint); 

     imageView.setImageBitmap(bMap); 

    } 


} 

}

Output

La sortie que je veux est quelque chose comme dans l'image ci-dessus. Le rectangle rouge peut être redimensionné et déplacé par l'utilisateur, puis enregistrer l'image.

+0

Donc, le but est de recadrer l'image? –

+0

Non, le but est juste de mettre en évidence une partie particulière ... – Vikram

+0

Si j'ai répondu à votre question, veuillez l'accepter comme réponse. –

Répondre

3

Vous devrez créer une vue personnalisée représentant le rectangle que vous avez dessiné. Dans le onDraw(...), vous pouvez définir le Paint du rectangle et sa taille initiale. Maintenant, le concept est que lorsque l'on touche les coins et qu'on les fait glisser, les coordonnées x et y du rectangle changent lorsque l'utilisateur lève son (ses) doigt (s) de l'écran. Je vais vous référer à this sur le Guide du développeur Android sur la façon de créer une vue personnalisée. Et this est un poste de question similaire sur ici qui peut vous donner quelques idées.

+0

Comment l'événement tactile est-il fait? Je comprends qu'il faut mal créer une vue personnalisée .. mais le glisser est lié à la vue. – Vikram

+0

@Vikram Les événements tactiles sont effectués dans le 'onTouchEvent (...)' http://developer.android.com/reference/android/view/View.html –

+0

Comment définir la nouvelle vue .. c'est à dire est le rectangle voir dans le code ci-dessus .. c'est à dire j'ai fait une nouvelle vue et la méthode ondraw() et aussi les touchesvents. Comment puis-je le lier au code ci-dessus ... c'est-à-dire que faire quand l'imageview se charge .. – Vikram

Questions connexes