Kapil Rajput
Kapil Rajput

Reputation: 11545

Adding ViewFlipper on first row of a Listview

I want to set a ViewFlipper on First row of a Listview like this

enter image description here

Individually i can set view flipper on top of listview like this :

mListView = (ListView) findViewById( R.id.mainListView );
viewFlipper =(ViewFlipper)findViewById(R.id.viewFlipper1);
setViewFlipperView();
CustomGestureDetector customGestureDetector = new CustomGestureDetector();
mGestureDetector = new GestureDetector(this, customGestureDetector);

String[] abc = new String[] { "A", "B", "C", "D",
                                  "E", "F", "G", "H","I","J","K","L","M","N","O","P","Q","R","S"
                                  ,"T","U","V","W","X","Y","Z"};  
ArrayList<String> abcList = new ArrayList<String>();
abcList.addAll( Arrays.asList(abc) );

listAdapter = new ArrayAdapter<String>(this, R.layout.simplerow, abcList);
mListView.setAdapter( listAdapter );

private View setViewFlipperView(){
  int[] resources = {
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher,
            R.drawable.ic_launcher
    };

    for (int i = 0; i < resources.length; i++) {
        ImageView imageView = new ImageView(this);
        imageView.setImageResource(resources[i]);
        viewFlipper.addView(imageView,i);
    }
  return viewFlipper;

 }
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
     mGestureDetector.onTouchEvent(ev);
    return super.dispatchTouchEvent(ev);
}
 @Override
public boolean onTouchEvent(MotionEvent event) {
    mGestureDetector.onTouchEvent(event);
    return super.onTouchEvent(event);
}
 class CustomGestureDetector extends GestureDetector.SimpleOnGestureListener    {
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float   velocityX, float velocityY) {
             // Swipe left (next)
            if (e1.getX() > e2.getX()) {
                viewFlipper.setInAnimation(context, R.anim.left_in);
                viewFlipper.setOutAnimation(context, R.anim.left_out);

                viewFlipper.showNext();
            }

            // Swipe right (previous)
            if (e1.getX() < e2.getX()) {
                viewFlipper.setInAnimation(context, R.anim.right_in);
                viewFlipper.setOutAnimation(context, R.anim.right_out);

                viewFlipper.showPrevious();
            }

            return super.onFling(e1, e2, velocityX, velocityY);
        }
    }

and xml looks like :

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

<ViewFlipper
    android:id="@+id/viewFlipper1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >
</ViewFlipper>

<ListView android:layout_width="fill_parent" 
  android:layout_height="fill_parent" 
  android:id="@+id/mainListView">
</ListView>

but while scrolling a listview view flipper stays on top, now my question is, is it possible to set ViewFlipper on top row of a listview so that it also scrolls when listview scrolls. I think i am clear with my Question. please help.

Upvotes: 1

Views: 295

Answers (2)

Kapil Rajput
Kapil Rajput

Reputation: 11545

Issue Resolved i have got the solution of my question, by adding viewflipper view as a HeaderView of a Listview mListView.addHeaderView(flipperView);, now viewFlipper view's are also scrolling with listview items few changes i have done in my code :

 LayoutInflater  inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
convertViewHeader = inflater.inflate(R.layout.myflipperiew , null);
ViewFlipper flipper=(ViewFlipper)convertViewHeader.findViewById(R.id.myflipper);
mListView = (ListView) findViewById( R.id.mainListView );
mListView.addHeaderView(flipper);

Upvotes: 0

SpiritCrusher
SpiritCrusher

Reputation: 21043

Just do this .. Add view flipper as header of listview it will work fine if you need only one view flipper in list view . If you need more then you should do that in adapters getView().

LayoutInflater  inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
convertViewHeader = inflater.inflate(R.layout.YourFlipperview , null);
ViewFlipper flipper=(ViewFlipper)convertViewHeader.findViewById(R.id.flipperId); 

listView.addHeaderView(convertViewHeader, null, false);

Use flipper as you want to use. Let me know if have any confusion

Upvotes: 2

Related Questions