добавление нескольких изображений в флиппер и загрузка изображений из URL в эти изображения - PullRequest
1 голос
/ 24 июня 2011

Я новичок в Android и пытался реализовать эффекты прокрутки на изображениях, загруженных из URL-адреса в просмотре изображений ... и мне это удалось, но теперь я хочу, чтобы было загружено более одного URL-адреса, и я могу видеть их все по одному один, проведя пальцем по экрану устройства как одно изображение, покрывающее весь экран ... я очень старался БТ не удается реализовать .. я не знаю, что будет использоваться более одного вида изображения .... некоторые для цикла и массива или что !!! просто беспомощный b'coz пытался более 30 раз ...

Пожалуйста, кто-нибудь помочь .... заранее спасибо ......

это мой код:

package com.conn;

import android.R;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.webkit.WebView;
import android.widget.ImageView;
import android.widget.ViewFlipper;

public class swipe_touch extends Activity {
    private static final String LOGID = "CHECKTHISOUT";

    private static final int SWIPE_MIN_DISTANCE = 120;
    private static final int SWIPE_MAX_OFF_PATH = 250;
    private static final int SWIPE_THRESHOLD_VELOCITY = 200;
    private GestureDetector gestureDetector;
    View.OnTouchListener gestureListener;

    private Animation slideLeftIn;
    private Animation slideLeftOut;
    private Animation slideRightIn;
    private Animation slideRightOut;
    private ViewFlipper viewFlipper;

    String message = "Initial Message"; 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.main);
      //Set up viewflipper
        viewFlipper = new ViewFlipper(this);  

        ImageView[] img = new ImageView[i];
        j_comm_func funs = new j_comm_func();//already made this class
        BitmapFactory.Options bmOptions;
        bmOptions = new BitmapFactory.Options();
        bmOptions.inSampleSize = 1;
        Bitmap bm = funs.LoadImage("http://65.175.77.34/newsnow/2462011/largest3/2462011-md-hr-1.jpg", bmOptions);
        img.setImageBitmap(bm);


        viewFlipper.addView(img);



        //set up animations
        slideLeftIn = AnimationUtils.loadAnimation(this, R.anim.slide_out_right);
        slideLeftOut = AnimationUtils.loadAnimation(this, R.anim.slide_in_left);
        slideRightIn = AnimationUtils.loadAnimation(this, R.anim.slide_in_left);
        slideRightOut = AnimationUtils.loadAnimation(this, R.anim.slide_out_right);


        //put up a brownie as a starter
        setContentView(viewFlipper);

        gestureDetector = new GestureDetector(new MyGestureDetector());
    }

    public class MyGestureDetector extends SimpleOnGestureListener {
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            try {
                if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
                    return false;
                // right to left swipe
                if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                    Log.v(LOGID,"right to left swipe detected");
                    viewFlipper.setInAnimation(slideLeftIn);
                    viewFlipper.setOutAnimation(slideLeftOut);
                    viewFlipper.showNext();
                    setContentView(viewFlipper);

                } // left to right swipe 
                else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                    Log.v(LOGID,"left to right swipe detected");                    
                    viewFlipper.setInAnimation(slideRightIn);
                    viewFlipper.setOutAnimation(slideRightOut);
                    viewFlipper.showPrevious();
                    setContentView(viewFlipper);

                }
            } catch (Exception e) {
                // nothing
            }
            return false;
        }
    }

    // This doesn't work
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (gestureDetector.onTouchEvent(event)){
            Log.v(LOGID,"screen touched");
            return true;
        }
        else{
            return false;
        }
    }
}

1 Ответ

1 голос
/ 24 июня 2011

Ну ... ваш метод onTouchEvent не работает, потому что ViewFlipper потребляет все сенсорные события (от документов до метода этого действия:

Вызывается, когда событие сенсорного экрана не было обработано ни одним изпредставления под ним. Это наиболее полезно для обработки событий касания, которые происходят за пределами ваших оконных окон, где нет представления для его получения.)

Чтобы реализовать то, что вы хотите, посмотрите здесь: События касания Android с несколькими видами (например, ListView в видоискателе)

В вашем случае вы должны сделать что-то вроде этого:

img.setOnTouchListener(new DragableViewTouchListener());

Чтобы добавить функции масштабированияВы можете сделать много вещей ... Я советую вам сделать следующее:

  1. Создать расширение ImageView: ZoomableImageVIew
  2. Переопределить метод dispatchTouchEvent следующим образом:

    public boolean dispatchTouchEvent(MotionEvent event) {
    if(needZoom(event)) {
       doZoom();
       // the event was handled. Do not propagate it to prevent handling it in ViewFlipper.
       return true;
    } else {
       // propagate the event (to ViewFlipper)
       super.dispatchTouchEvent(event);
    }
    

    }

Удачи !!

...