Question

I am using an ImageSwitcher to display a list of pictures. When the user selects an item from a Listview in A.class, the ImageSwitcher is called and the user views the pictures. If item 1 is clicked on in the list, then a certain set of drawables should be passed to the imageswitcher. If item 2 on the list is clicked, a different set of pictures should be shown. I have been struggling with how to pass the drawables from A.class to the ImageSwitcher.

In Summary: I want to pass a class of drawables from A.class to ImageSwitcher such that if item 1 is clicked, in ImageSwitcher:

private Integer[] mThumb = {R.Drawable.pic1, R.Drawable.pic2, R.Drawable.pic3}

and if item 2 is clicked, I want in ImageSwitcher for: private Integer[] mThumb = [R.Drawable.pic6, R.Drawable.pic7, R.Drawable.pic8}

From the sending Activity, so far I have tried many permutations of using putExtra putIntegralArrayExtra, etc etc. I'm sure the answer to this is pretty basic. I am new to java, and am still (slowly) learning. Thanks for your help!

Here is the code for the imageswitcher, so you can see what I mean by int[] mThumb:

public class ImageSwitch1 extends Activity implements
        AdapterView.OnItemSelectedListener, ViewSwitcher.ViewFactory, OnTouchListener {


    Matrix matrix = new Matrix();
    Matrix eventMatrix = new Matrix();

    final static int NONE = 0;
    final static int DRAG = 1;
    final static int ZOOM = 2;
    int touchState = NONE;




    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.imageswitcher);


        mSwitcher = (ImageSwitcher) findViewById(R.id.switcher);
        mSwitcher.setFactory(this);
        mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
                android.R.anim.fade_in));
        mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
                android.R.anim.fade_out));


        Gallery g = (Gallery) findViewById(R.id.gallery);
        g.setAdapter(new ImageAdapter(this));
        g.setOnItemSelectedListener(this);


    }


    public void onItemSelected(AdapterView parent, View v, int position, long id) {
        mSwitcher.setImageResource(mImage[position]);
        final TextView tv = (TextView)findViewById(R.id.SwitcherText);
        tv.setText(mText[position]);    



    }  



    public void onNothingSelected(AdapterView parent) {
    }

    public View makeView() {
        ImageView i = new ImageView(this);
        i.setScaleType(ScaleType.MATRIX);
        i.setBackgroundColor(0xFF000000);
        i.setScaleType(ImageView.ScaleType.FIT_CENTER);
        i.setLayoutParams(new ImageSwitcher.LayoutParams(LayoutParams.MATCH_PARENT,
                LayoutParams.MATCH_PARENT));
        i.setOnTouchListener(this);
        return i;
    }
    final static float MIN_DIST = 50;
    static float eventDistance = 0;
    static float centerX =0, centerY = 0;
    public boolean onTouch(View v, MotionEvent event) {
        ImageView i = (ImageView) v;
        switch (event.getAction() & MotionEvent.ACTION_MASK) {
        case MotionEvent.ACTION_DOWN:
        //primary touch event starts: remember touch down location
        touchState = DRAG;
        centerX = event.getX(0);
        centerY = event.getY(0);
        eventMatrix.set(matrix);
        break;
        case MotionEvent.ACTION_POINTER_DOWN:
        //secondary touch event starts: remember distance and center
        eventDistance = calcDistance(event);
        calcMidpoint(centerX, centerY, event);
        if (eventDistance > MIN_DIST) {
        eventMatrix.set(matrix);
        touchState = ZOOM;
        }
        break;
        case MotionEvent.ACTION_MOVE:
            if (touchState == DRAG) {
            //single finger drag, translate accordingly
            matrix.set(eventMatrix);
            matrix.setTranslate(event.getX(0) - centerX,
            event.getY(0) - centerY);
            } else if (touchState == ZOOM) {
            //multi-finger zoom, scale accordingly around center
            float dist = calcDistance(event);
            if (dist > MIN_DIST) {
            matrix.set(eventMatrix);
            float scale = dist / eventDistance;
            matrix.postScale(scale, scale, centerX, centerY);
            }
            }
            // Perform the transformation
            i.setImageMatrix(matrix);
            break;
            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_POINTER_UP:
            touchState = NONE;
            break;
            }
            return true;
            }
            private float calcDistance(MotionEvent event) {
            float x = event.getX(0) - event.getX(1);
            float y = event.getY(0) - event.getY(1);
            return FloatMath.sqrt(x * x + y * y);
            }
            private void calcMidpoint(float centerX, float centerY,
            MotionEvent event) {
            centerX = (event.getX(0) + event.getX(1))/2;
            centerY = (event.getY(0) + event.getY(1))/2;
            }    


    private ImageSwitcher mSwitcher;

    public class ImageAdapter extends BaseAdapter {
        public ImageAdapter(Context c) {
            mContext = c;
        }

        public int getCount() {

        return mThumb.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 im = new ImageView(mContext);
            im.setImageResource(mThumb[position]);
            im.setAdjustViewBounds(true);
            im.setLayoutParams(new Gallery.LayoutParams(
            LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
            im.setBackgroundResource(R.drawable.picture_frame);


            return im;
        }
        private Context mContext;
    }




  //these are the little pictures  
    private Integer[] mThumb = {
         R.drawable.lp_image1_thumb, R.drawable.lp_image2_thumb, R.drawable.lp_image3_thumb,
         R.drawable.lp_image4_thumb, R.drawable.lp_image5_thumb, R.drawable.lp_image6_thumb,
         R.drawable.lp_image7_thumb, R.drawable.lp_image8_thumb, R.drawable.lp_image9_thumb,
         R.drawable.lp_image10_thumb};
Était-ce utile?

La solution 2

Here's how I did it, and it works, though it may be rather clunky:

sending activity:

if(position == 0)
{
int[] mThumb =
 {
 R.drawable.lp_image1,R.drawable.lp_image2, R.drawable.lp_image3, R.drawable.lp_image4,R.drawable.lp_image5, R.drawable.lp_image6, R.drawable.lp_image7,R.drawable.lp_image8,R.drawable.lp_image9
    }; 
myIntent = new Intent(view.getContext(), LP.class);
b.putIntArray("mImage", mImage);
b.putInt("i", 0);
}

Receiving Activity:

Bundle b=this.getIntent().getExtras();
int[] mThumb = b.getIntArray("mThumbSent");
ImageAdapter adapter = new ImageAdapter(this, mThumb);

And this code can be repeated wherever necessary to bring in the int[] from the sending activity

Autres conseils

The idea is you have to create an INDEX for the selected item from the listview (you may use listview.selectedItem) and implement listener to do the image switching.

When the user selects an item from a Listview in A.class, the ImageSwitcher is called....If item 1 is clicked on in the list, then a certain set of drawables should be passed to the imageswitcher.

implement ListView.setOnItemSelectedListener. You have it already.

the user views the pictures

implement OnTouchListener. You have it also already but you have to add the image switching. You may switch it using sliding techniques then check the INDEX to know on what set of pictures you have to load. Just provide also a INDEX2 for the current image within the selected set of pictures.

update your code then I'll guide you.

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