Как передать класс ImageSwitcher в Android? - PullRequest
0 голосов
/ 18 августа 2011

Я использую ImageSwitcher для отображения списка картинок. Когда пользователь выбирает элемент из списка в A.class, вызывается ImageSwitcher, и пользователь просматривает изображения. Если щелкнуть элемент 1 в списке, то определенный набор элементов рисования должен быть передан в переключатель изображений. Если щелкнуть пункт 2 в списке, должен отображаться другой набор изображений. Я боролся с тем, как передать drawables из A.class в ImageSwitcher.

В итоге: Я хочу передать класс drawables из A.class в ImageSwitcher таким образом, чтобы при нажатии элемента 1 в ImageSwitcher:

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

и если щелкнуть пункт 2, я хочу в ImageSwitcher для: private Integer[] mThumb = [R.Drawable.pic6, R.Drawable.pic7, R.Drawable.pic8}

Из отправляющего Activity до сих пор я пробовал много вариантов использования putExtra putIntegralArrayExtra и т. Д. И т. Д. Я уверен, что ответ на этот вопрос довольно простой. Я новичок в Java, и все еще (медленно) учусь. Спасибо за вашу помощь!

Вот код для переключателя изображений, так что вы можете видеть, что я имею в виду под 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};

Ответы [ 2 ]

0 голосов
/ 01 октября 2011

Вот как я это сделал, и это работает, хотя это может быть довольно неуклюжим:

отправка:

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

Получение:

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

И этот код можно повторять везде, где необходимо, чтобы ввести int [] из действия отправки

0 голосов
/ 30 сентября 2011

Идея заключается в том, что вы должны создать INDEX для выбранного элемента из списка (вы можете использовать listview.selectedItem) и внедрить слушатель для переключения изображений.

Когда пользователь выбирает элемент из списка в A.class, вызывается ImageSwitcher .... Если щелкнуть элемент 1 в списке, то определенный набор элементов рисования должен быть передан в переключатель изображений.

реализовать ListView.setOnItemSelectedListener. У вас это уже есть.

пользователь просматривает картинки

реализовать OnTouchListener. У вас уже есть, но вы должны добавить переключение изображений. Вы можете переключить его, используя скользящие приемы, затем проверьте ИНДЕКС, чтобы узнать, какой набор картинок вы должны загрузить. Просто укажите также INDEX2 для текущего изображения в выбранном наборе изображений.

обновите ваш код, тогда я вам помогу.

...