2012-10-29 36 views
1

在我的活动中,我有一个imageView(在顶部)和textView(在底部)。使用这两个视图我显示一个图像及其相应的描述。我已经使用'SimpleOnGestureListener'实现了fling,这样用户就可以浏览不同的图像及其相应的描述(每次投掷时,我都会加载不同的图像并显示给用户)。onClick阻止onFling

现在,当我为ImageView添加onClickListener时(我需要检测onClick,以便可以显示带有图像描述的Toast),问题就开始了。但onClick似乎阻止了投掷事件。我如何检测投掷。

是否已经通过这个论坛下面的问题(和其他几个)不见了..

android - giving onTouch priority over onClick

Android onClick blocking onFling

但还是没能找出解决方案。

下面给出的是代码

public class MainActivity extends Activity{ 
    ImageView m_imageView; 
    String[] m_imageNames = { "img1__", "img2__", "img2__"}; 
    int m_index = 0; 
    Resources m_res; 
    Drawable m_drawable; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Log.v("INFO", "Inside oncreate"); 

     m_imageView = (ImageView)findViewById(R.id.imageView1); 
     m_res = getResources(); 
     int imageId = m_res.getIdentifier(m_imageNames[m_index], "drawable", getPackageName()); 
     Drawable drawable = m_res.getDrawable(imageId); 
     m_imageView.setImageDrawable(drawable); 

     m_imageView.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Log.v("INFO", "Inside onClick"); 
     } 
     }); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
    Log.v("INFO", "onTouchEvent detected"); 
    return gestureDetector.onTouchEvent(event); 
    } 

    SimpleOnGestureListener simpleOnGestureListener 
    = new SimpleOnGestureListener(){ 

    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; 

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, 
     float velocityY) { 
       //Fling code goes here 
     } 
    }; 

    GestureDetector gestureDetector = new GestureDetector(null, SimpleOnGestureListener); 

} 

+0

我不确定你从代码中拿出了什么,但是你有一些严重的支架平衡问题正在发生。你能解决这些问题并更新你的代码吗? – Eric

+0

对不起,哥们...这样做(这变得非常可怜......当我把代码形式的eclipse复制到这里时).. – Raj

回答

0

这些方法一般有boolean回报,这表示该事件已经被消耗掉,不应该进一步传播。尝试更改返回值。