Domanda

Sto lavorando a un progetto che mi richiede di implementare Due viste a pergamena orizzontale con un Vista dell'immagine in mezzo loro. Vorrei estendere le dimensioni della vista immagine per colmare il divario tra la vista a scorrimento. Ho esaminato il codice di esempio, ma non sembra menzionare da nessuna parte delle dimensioni della vista dell'immagine. Ho racchiuso il codice di seguito dopo l'immagine che descrive il mio problema.

enter image description here

public class Gallery2DemoActivity extends Activity {
private Gallery gallery,gallery1;
private ImageView imgView;

private Integer[] Imgid = {
    R.drawable.a_1, R.drawable.a_2, R.drawable.a_3, R.drawable.a_4, R.drawable.a_5, R.drawable.a_6, R.drawable.a_7
};

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

gallery = (Gallery) findViewById(R.id.examplegallery);
gallery.setAdapter(new AddImgAdp(this));

gallery1 = (Gallery)findViewById(R.id.examplegallery1);
gallery1.setAdapter(new AddImgAdp(this));

imgView = (ImageView)findViewById(R.id.ImageView01);    
imgView.setImageResource(Imgid[0]);


 gallery.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView parent, View v, int position, long id) {
        imgView.setImageResource(Imgid[position]); 
    }
});

}

public class AddImgAdp extends BaseAdapter {
int GalItemBg;
private Context cont;

public AddImgAdp(Context c) {
    cont = c;
    TypedArray typArray = obtainStyledAttributes(R.styleable.GalleryTheme);
    GalItemBg =  typArray.getResourceId(R.styleable.GalleryTheme_android_galleryItemBackground, 0);
    typArray.recycle();
}

public int getCount() {
    return Imgid.length;
}

public Object getItem(int position) {
    return position;
}

public long getItemId(int position) {
    return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
    ImageView imgView = new ImageView(cont);

    imgView.setImageResource(Imgid[position]);
    imgView.setLayoutParams(new Gallery.LayoutParams(110, 100));
    imgView.setScaleType(ImageView.ScaleType.FIT_XY);
    imgView.setBackgroundResource(GalItemBg);

    return imgView;
}
}

Questo è il mio file principale XML.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Gallery
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/examplegallery"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />
<ImageView
    android:id="@+id/ImageView01"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:layout_weight="1"/>
<Gallery
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/examplegallery1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />
</LinearLayout>

Di seguito è riportato il mio file di attributi:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="GalleryTheme">
    <attr name="android:galleryItemBackground" />
</declare-styleable>
</resources>
È stato utile?

Soluzione

Vinner,

Il problema qui è davvero due numeri:

  1. La dimensione di ImageView si basa sul genitore, il che significa che condivide la sua larghezza e altezza.

  2. L'immagine viene ridimensionata per corrispondere alla dimensione più limitante (larghezza).

Il modo più semplice per gestirlo è impostare il scaletypo di ImageView. Ci sono un certo numero di tipi di ridimensionamento, ma quello che probabilmente vuoi è Centro centrale. Nel codice, questo è fatto da view_name.setScaleType(ImageView.ScaleType.CENTER_CROP). Puoi anche farlo in XML per la tua ImageView con l'attributo android:scaleType="centerCrop". Intendiamoci, questo ridimensionerà la tua immagine e manterrà il tuo proporzione, ma taglierà i lati.

Basta aggiungere l'attributo sopra al tuo ImageView nel tuo XML, (probabilmente sotto il tuo layout_weight) e dovrebbe fare quello che vuoi.

Spero che sia di aiuto,

Fuzzicallogic

Altri suggerimenti

Proverai sotto il codice ...?

?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/LinearLayout01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Gallery
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/examplegallery"
android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_weight="1" />
<ImageView
android:id="@+id/ImageView01"
android:layout_width="fill_parent"
android:layout_height="0dp" 
android:src="@drawable/ic_launcher"
android:layout_weight="1"/>
<Gallery
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/examplegallery1"
android:layout_width="fill_parent"
android:layout_height="wrap_content" android:layout_weight="1"/>
</LinearLayout>

E se non funziona, prova a impostare l'altezza della tua galleria su qualche DP, funzionerà .. Grazie

La dimensione di ImageView si basa sul genitore, il che significa che condivide la sua larghezza e altezza. Inoltre, l'immagine viene ridimensionata per corrispondere alla dimensione più limitante (larghezza).

Sembra che nella classe AddImGadp si imposta l'altezza e la larghezza di ImageView su dimensioni di pixel specifiche.

imgView.setLayoutParams(new Gallery.LayoutParams(110, 100)); //width = "110px", height="100px"

Personalmente avrei messo il layout come relativaLayout, allineerei la prima galleria con la parte superiore, la seconda galleria con il fondo, non ha l'immagine impostato per allineare sopra la seconda galleria. Quindi crea l'immagine:

imgView.setLayoutParams( new Gallery.LayoutParams(
   Gallery.LayoutParams.FILL_PARENT, 
   Gallery.LayoutParams.FILL_PARENT) );

Se si imposta ImageView su Fill_Parent con un LinearLayout, si riempirà nella parte inferiore dello schermo e la seconda galleria verrà fuori dallo schermo.

Sappi anche che compilando tutto lo spazio, molto probabilmente distorcerai l'immagine. Considera tutte le tue opzioni di ridimensionamento: http://developer.android.com/reference/android/widget/imageview.scaletype.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top