Question

Je travaille sur un projet qui m'oblige à mettre en œuvre deux vues de défilement horizontal avec une vue d'image entre elles.Je voudrais étendre la taille de la vue d'image pour combler l'espace entre la vue de défilement.J'ai parcouru l'exemple de code, mais il ne semble pas mentionner la taille de l'image.J'ai inclus le code ci-dessous après l'image décrivant mon problème.

entrez la description de l'image ici

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

Ceci est mon fichier principal 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>

Voici mon fichier d'attributs:

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

La solution

Vinner,

Le problème ici est en réalité deux problèmes:

  1. La taille de ImageView est basée sur le parent, ce qui signifie qu'elle partage sa largeur et hauteur.

  2. L'image est redimensionnée pour correspondre à la dimension (largeur) la plus limitative.

La manière la plus simple de gérer cela est de définir le ScaleType de ImageView.Il existe un certain nombre de types de mise à l'échelle, mais celui que vous souhaitez probablement est Center Crop .Dans le code, cela se fait par view_name.setScaleType(ImageView.ScaleType.CENTER_CROP).Vous pouvez également le faire en XML pour votre ImageView avec l'attribut android:scaleType="centerCrop".Attention, cela redimensionnera votre image et conservera votre rapport hauteur / largeur, mais cela coupera les côtés.

Ajoutez simplement l'attribut ci-dessus à votre ImageView dans votre XML, (probablement sous votre layout_weight), et il devrait faire ce que vous voulez.

J'espère que cela vous aidera,

FuzzicalLogic

Autres conseils

Voulez-vous essayer le code ci-dessous ...?

?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>

et si cela ne fonctionne pas, essayez de régler la hauteur de votre galerie à un certain dp, cela fonctionnera .. Merci

La taille de ImageView est basée sur le parent, ce qui signifie qu'il partage sa largeur et sa hauteur.En outre, l'image est redimensionnée pour correspondre à la dimension la plus limitative (largeur).

Il semble que dans la classe AddImgAdp, vous définissez la hauteur et la largeur de ImageView sur des tailles de pixels spécifiques.

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

Personnellement, je mettrais la mise en page en tant que mise en page Relative, alignerais la première galerie avec le haut, la deuxième galerie avec le bas, et je définirais ImageView pour s'aligner au-dessus de la deuxième galerie.Ensuite, créez l'image:

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

Si vous définissez ImageView sur fill_parent avec un LinearLayout, il se remplira jusqu'au bas de l'écran et la deuxième galerie sera hors de l'écran.

Sachez également qu'en remplissant tout l'espace, vous déformerez probablement l'image.Considérez toutes vos options de redimensionnement: http://developer.android.com/reference / android / widget / ImageView.ScaleType.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top