2011-06-24 20 views
1

我是新来的android和试图实施刷卡效果的图像加载从url中的图像...我成功了,但现在我想要超过一个网址应该加载,我可以通过在设备屏幕上作为覆盖整个屏幕的单个图像在设备屏幕上滑动手指一个接一个地看到它们... 我非常想bt未能实现.. 我不知道更多比一个图像视图将被使用....一些for循环&数组或什么! 只是无奈b'coz尝试30次以上......添加不止一个imageview来鳍状肢和从url加载图像到这些图像

请有人帮助.... thanx提前......

这是我的代码:

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

嗯......你的方法的onTouchEvent行不通的,因为所有的触摸事件是由ViewFlipper消耗(从文档到本次活动的方法:

当触摸屏事件并非由任何在它之下这个观点来处理调用。对于处理您的窗口范围之外发生的触摸事件非常有用,在那里没有接收它的视图。 )

要实现你想看看这里的东西:Android touch events with multiple views(such as a ListView in a Viewflliper)

在你的情况,你应该做这样的事情:

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

    }

祝你好运!

+0

thanxxx flavio它真的帮了我很多...... – sunny

+0

确定你能帮助我在这个程序中实施缩放手指传播吗.. – sunny

+0

我只能建议你...我已经更新了我的答案 – Flavio