2016-03-18 2 views
0

In meinem Projekt wählt der Benutzer ein Bild aus der Galerie aus, das dann als Hintergrund für meine benutzerdefinierte Ansicht festgelegt wird. Und ich muss die Größe dieser Ansicht an die Größe des Bildes anpassen.So passen Sie die Größe der Ansicht entsprechend ihrem Inhalt an

In der aktuellen Version ist die Größe meiner benutzerdefinierten Ansicht statisch. Aber ich muss es an die Größe des gewählten Bildes anpassen. Und ich weiß auch nicht, wie ich dieses Bild als Hintergrund einstellen soll, ohne dass es gestreckt wird.

XML-Datei von Fragment

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="0dp" 
    android:layout_weight="9"> 

    <com.example.kreslenie.mapakreslenie.CanvasMap 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_centerInParent="true" 
     android:id="@+id/mapping_canvas" /> 

    ... 


</RelativeLayout> 

Fragment Methode, die das Bild lädt und setzt sie dann als Hintergrund

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    try { 

     if (requestCode == RESULT_LOAD_IMG && resultCode == -1 && null != data) { 


      Uri selectedImage = data.getData(); 
      String[] filePathColumn = { MediaStore.Images.Media.DATA }; 


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

      cursor.moveToFirst(); 

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


      Bitmap bitmap = Bitmap.createBitmap(BitmapFactory.decodeFile(imgDecodableString)); 
      Drawable image = new BitmapDrawable(activity.getResources(), bitmap); 
      canvas.setBackground(image); 


     } else { 
      Toast.makeText(activity, "You haven't picked any Image", 
        Toast.LENGTH_LONG).show(); 
     } 
    } catch (Exception e) { 
     Toast.makeText(activity, "Something went wrong", Toast.LENGTH_LONG) 
       .show(); 
    } 


} 
+0

Legen Sie es nicht als Hintergrund fest, legen Sie es als Quelle fest ('src'). So etwas wie 'imageView.setImageDrawable (zeichnbar)' oder 'imageView.setImageBitmap (Bitmap)'. Schließlich, legen Sie Ihre 'Layout-Parameter zu wrap_content' oder, wenn Sie die statische Größe behalten möchten, verwenden Sie' scaleType', um zu verwalten, wie es skaliert wird. – zgc7009

+0

Eigentlich muss ich dieses Bild auf meine benutzerdefinierte Ansicht einstellen. Ich muss meine Frage bearbeiten. – silicoin

+0

Lassen Sie Ihre ImageView einfach erweitern, es sei denn, es gibt einen Grund dafür. – zgc7009

Antwort

0

ändern ImageView zu -

<ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_margin="5dp" 
     android:id="@+id/compass_image" 
     android:contentDescription="@string/compass_description" 
     android:src="@drawable/compass" 
     android:visibility="gone" 
     android:layout_alignTop="@+id/mapping_canvas" 
     android:layout_alignParentEnd="true" /> 

Und während der Einstellung der Bildverwendung

setImageResource() oder setImageDrawbale() oder setImageBitmap() statt setBackground()

+0

Eigentlich muss ich dieses Bild auf meine benutzerdefinierte Ansicht einstellen. Ich muss meine Frage bearbeiten. – silicoin

0

Ich bin nicht sicher, warum Sie eine benutzerdefinierte Ansicht verwenden. Wenn Sie eine benutzerdefinierte Ansicht nur für dieses Bild verwenden, ändern Sie sie in die normale Bildansicht von Android und fügen Sie diesen Code hinzu. Hier ist, was ich getan habe, wenn ich die Bildansicht an den Bildschirm anpassen muss.

Immer wenn ich ein BitmapDrawable verwende und seine Größe zur Laufzeit ändere, füllte es nicht die Bildansicht in allen Geräten in Android. Die einzige Möglichkeit besteht darin, ein neues Layout mit einer neuen Bildansicht zu erstellen und anzuzeigen.

public ImageView imageView; 

//inside onCreate() 
imageView = (ImageView) findViewById(R.id.yourimageviewid); 

//Where you want to create the image 
Drawable bitmapDrawable = new BitmapDrawable(bitmap);    

After this, add this, 

float factor = CurrentDeviceWindowWidth/(float) bitmap.getWidth(); 

// we are creating a new layout with width and height approximate ratio to the bitmap width and height, and add the image to it..If you want to adjust the ratio, then you can adjust the ratio formula.// 

RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(bitmap.getWidth(), (int) bitmap.getHeight() * factor); 

imageview.setLayoutParams(layoutParams); 
imageView.setAdjustViewBounds(true); 
imageView.setImageDrawable(bitmapDrawable); 

Versuchen Sie es, und lassen Sie mich wissen.

+0

Der Grund, warum ich benutzerdefinierte Ansicht verwende, ist, dass ich später darauf zeichnen muss. Das würde mir nicht helfen. Aber danke für die Antwort. – silicoin

+0

Also, Sie möchten ein Bild, was auch immer der Benutzer klickt, als das Hintergrundbild für diese benutzerdefinierte Ansicht festlegen, und Sie werden ein weiteres Bild oberhalb dieser benutzerdefinierten Ansicht festlegen .....? ... – Suv

+0

Art von . Der Benutzer wählt das Bild aus der Galerie, bei der es sich um eine Karte handelt, auf der er basierend auf seinem Standort Punkte zeichnet. Und ich brauche diese benutzerdefinierte Ansicht, um sich auf das Maximum einzustellen. mögliche Größe des Bildes. – silicoin

Verwandte Themen