Android中如何在点击事件中获得手指所在的X,Y坐标?

xieyunchao 2013-07-15 04:52:19
我现在有一个需求,就是在点击的时候需要获取当前位置的X,Y坐标,我在网上查了一下,都是在OnTouchListener中做的,但我想在onclick事件中达到相同的效果,不知道怎么处理?

OnTouchListener listener = new OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {

/**
* Projection 用于将屏幕坐标转换为地理位置坐标
*/
int x = (int) arg1.getX();
int y = (int) arg1.getY();
currentPt = mMapView.getProjection().fromPixels(x, y);
updateMapState(arg1);

/**
* 传递点击事件给MapView,sdk会自己处理缩放,平移等手势操作
*/
return false;
}
};

mMapView.setOnTouchListener(listener);
...全文
16297 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xieyunchao 2013-07-16
  • 打赏
  • 举报
回复
说一下解决方法吧,用手势。


private class GISGestureListener extends SimpleOnGestureListener {

		   private Context mContext; 

		   GISGestureListener(Context context) { 
		        mContext = context; 
		    } 

		    /**
		     * 用户(轻触触摸屏后)松开,由一个1个MotionEvent ACTION_UP触发
		     */
		    @Override 
		    public boolean onSingleTapUp(MotionEvent e) { 

		        Toast.makeText(mContext, "SHOW " +  e.getX()+"     "+e.getY(), Toast.LENGTH_SHORT).show(); ;

		        int x = (int) e.getX();
				int y = (int) e.getY();
				currentPt = mMapView.getProjection().fromPixels(x, y);
		        pop.hidePop();
				popupText.setBackgroundResource(R.drawable.popup);
				popupText.setText("点击选择该点为资源坐标");
				pop.showPopup(BMapUtil.getBitmapFromView(popupText), currentPt, 8);
		        return false; 

		    } 
	  
	}

。。。。
mGestureDetector = new GestureDetector(this, new GISGestureListener(this));



OnTouchListener listener = new OnTouchListener() {
			@Override
			public boolean onTouch(View arg0, MotionEvent arg1) {

				/**
				 * Projection 用于将屏幕坐标转换为地理位置坐标
				 */
				
				//updateMapState(arg1);

				/**
				 * 传递点击事件给MapView,sdk会自己处理缩放,平移等手势操作
				 */
				return mGestureDetector.onTouchEvent(arg1) ;
			}
		};

xieyunchao 2013-07-15
  • 打赏
  • 举报
回复
引用 1 楼 youngc527 的回复:
一个变通的办法,注册onTouch接口,记住x、y值,然后等有onClick的时候就用这对值…… 囧rz
我也这么想过,稍微复杂些,是不是有更好的方法?
xieyunchao 2013-07-15
  • 打赏
  • 举报
回复
onTouch事件会有一个什么问题呢?太灵敏,我左右滑动的时候也会促发这个事件,我不希望这样。我就希望点击的时候获取坐标执行相应的动作。
Darcy杨 2013-07-15
  • 打赏
  • 举报
回复
一个变通的办法,注册onTouch接口,记住x、y值,然后等有onClick的时候就用这对值…… 囧rz
仿Launcher的GridView拖动是一个长按GridView的item,然后将其拖拽其他item上面,使得GridView的item发生交换,比较典型的就是我们的Launcher,网上有很多关于GridView的拖动的Demo,但是大部分都是相同的,而且存在一些Bug,而且大部分都是点击GridView的item然后进行拖动,或者item之间不进行实时交换,今天给大家更加详细的介绍GridView拖拽,并且将Demo做的更完美。   实现思路: 1、根据手指按下的X,Y坐标来获取我们在GridView上面点击的item 2、手指按下的时候使用Handler和Runnable来实现一个定时器,假如定时时间为1000毫秒,在1000毫秒内,如果手指抬起了移除定时器,没有抬起并且手指点击在GridView的item所在的区域,则表示我们长按了GridView的item 3、如果我们长按了item则隐藏item,然后使用WindowManager来添加一个item的镜像在屏幕用来代替刚刚隐藏的item 4、当我们手指在屏幕移动的时候,更新item镜像的位置,然后在根据我们移动的X,Y的坐标来获取移动到GridView的哪一个位置 5、到GridView的item过多的时候,可能一屏幕显示不完,我们手指拖动item镜像到屏幕下方,要触发GridView想上滚动,同理,当我们手指拖动item镜像到屏幕上面,触发GridView向下滚动 6、GridView交换数据,刷新界面,移除item的镜像 本例子来自于CSND xiaanming的博客,详细的源码分析已经帮大家离线成pdf文档了。   

80,352

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧