Création d'une galerie personnalisée - overriding onFling
Donc, j'ai suivi ce thread particulier (Comment faire pour arrêter le défilement dans une Galerie Widget?) pourtant, je suis incapable de le faire fonctionner correctement.
J'ai créé une coutume MyGallery de la classe de l'extension de la Galerie. J'ai ajouté le code dans le lien ci-dessus...suis-je censé ajouter <com.example.mygallery
dans le fichier XML? Si oui, dois-je aussi ajouter que l'importation du fichier java ou n'est-ce pas nécessaire que le fichier XML? Je suis donc très confus.
Je veux simplement faire de la galerie se déplacer d'une image à la fois par fling.
Fichier XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/carlot_background"
>
<com.gallerytest.mygallery
android:id="@+id/thisgallery"
android:gravity="center"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>
mygallery.java:
package com.gallerytest;
import android.content.Context;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.widget.Gallery;
public class mygallery extends Gallery {
public mygallery(Context ctx, AttributeSet attrSet) {
super(ctx);
//TODO Auto-generated constructor stub
}
private boolean isScrollingLeft(MotionEvent e1, MotionEvent e2){
return e2.getX() > e1.getX();
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY){
int kEvent;
if(isScrollingLeft(e1, e2)){ //Check if scrolling left
kEvent = KeyEvent.KEYCODE_DPAD_LEFT;
}
else{ //Otherwise scrolling right
kEvent = KeyEvent.KEYCODE_DPAD_RIGHT;
}
onKeyDown(kEvent, null);
return true;
}
}
main.java:
package com.gallerytest;
import android.app.Activity;
import android.content.Context;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
public class main extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mygallery gallery = (mygallery) findViewById(R.id.thisgallery);
gallery.setAdapter(new AddImgAdp(this));
gallery.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView parent, View v, int position, long id) {
Toast.makeText(main.this, "Position=" + position, Toast.LENGTH_SHORT).show();
}
});
}
public class AddImgAdp extends BaseAdapter {
int GalItemBg;
private Context cont;
private Integer[] Imgid = {
R.drawable.image1, R.drawable.image2, R.drawable.image3, R.drawable.image4, R.drawable.image5};
public AddImgAdp(Context c) {
cont = c;
TypedArray typArray = obtainStyledAttributes(R.styleable.Gallery1);
GalItemBg = typArray.getResourceId(R.styleable.Gallery1_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.setScaleType(ImageView.ScaleType.FIT_CENTER);
imgView.setBackgroundResource(0x0106000d);
imgView.setLayoutParams(new mygallery.LayoutParams(300, 240));
return imgView;
}
}
}
J'aimerais un peu d'aide. Merci!!
~Rick
source d'informationauteur user560837
Vous devez vous connecter pour publier un commentaire.
Il suffit d'ajouter le attrSet param pour le constructeur de votre galerie personnalisée:
Cela a fonctionné pour moi.
Leo Vannucci
Oui. Vous devriez utiliser com.gallerytest.mygallery au lieu de Galerie dans XMLs. Tout va être fonctionne bien parce que mygallery est une sous-classe de la Galerie. Pas besoin pour les importations en XML.
Changer le XML a été la clé...j'avais été faire TypeCastException pour quelque temps, et il ne pouvait pas trouver la raison dans mon code. Enfin trouvé dans ce post, " Vous devriez utiliser com.gallerytest.mygallery au lieu de Galerie dans XMLs" et a résolu mon problème. merci beaucoup.