2012-05-17 48 views
2

是否可以找到我点击布局的位置?我有一个大的ScrollView,我想知道我点击的位置。我的屏幕尺寸是854x480,但ScrollView有2000x480。我如何找到我点击的坐标位置?查找在ScrollView中单击的坐标

+0

尝试此[样品](http://xjaphx.wordpress.com/2011/06/13/detect-xy-coordinates-when-clicking-or-touching-on-screen/) –

回答

1

在Activity类中。

import android.view.MotionEvent; 

... 

@Override 
public boolean onTouchEvent(MotionEvent e) 
    { 

    switch (e.getAction()) 
      { 

    case MotionEvent.ACTION_DOWN: 
     float cordinate_X = e.getRawX(); 
     float cordinate_Y = e.getRawY(); 
     break; 
    } 
    return true; 
} 
+0

不会告发”吨只是给屏幕上的坐标,而不是在ScrollView上的位置? – SpeedBirdNine

+0

然后只需添加滚动视图的scrollY,是吗? – Phix

0

你为什么不创建自定义监听我的下面鳕鱼可以帮助你

import android.content.Context; 
import android.util.AttributeSet; 
import android.view.MotionEvent; 
import android.widget.ScrollView; 

public class ObservableScrollView extends ScrollView { 

    private ScrollViewListener scrollViewListener = null; 

    public ObservableScrollView(Context context) { 
     super(context); 
    } 

    public ObservableScrollView(Context context, AttributeSet attrs, 
      int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    public ObservableScrollView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public void setScrollViewListener(ScrollViewListener scrollViewListener) { 
     this.scrollViewListener = scrollViewListener; 
    } 

    @Override 
    protected void onScrollChanged(int x, int y, int oldx, int oldy) { 
     super.onScrollChanged(x, y, oldx, oldy); 
     // if (scrollViewListener != null) { 
     // scrollViewListener.onScrollChanged(this, x, y, oldx, oldy); 
     // } 
    } 

    private boolean mScrollable = true; 

    public void setScrollingEnabled(boolean enabled) { 
     mScrollable = enabled; 
    } 

    public boolean isScrollable() { 
     return mScrollable; 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent ev) { 
     switch (ev.getAction()) { 
     case MotionEvent.ACTION_UP: 
     case MotionEvent.ACTION_MOVE: 
      // if we can scroll pass the event to the superclass 
      if (mScrollable) 
       return super.onTouchEvent(ev); 
      // only continue to handle the touch event if scrolling enabled 
      return mScrollable; // mScrollable is always false at this point 
     default: 
      return super.onTouchEvent(ev); 
     } 
    } 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent ev) { 
     // Don't do anything with intercepted touch events if 
     // we are not scrollable 
     if (!mScrollable) 
      return false; 
     else 
      return super.onInterceptTouchEvent(ev); 
    } 

} 
0

我建立了被点击使用下面的方法拉长滚动视图的坐标。

float yScrollPosition = event.getY(); 
DisplayMetrics metrics = new DisplayMetrics(); 
float logicalDensity = metrics.density; 
float yPosition = yScrollPosition/logicalDensity;