`

android 触摸点在屏幕中的坐标与bitmap在屏幕中坐标的比较

 
阅读更多

最近项目中要实现点击游戏主角附近位置,控制主角的运动,之前总是出现问题,触摸主角左上角时得到的坐标和主角位图在屏幕中的坐标不一致。

最终问题得到解决,一个原因是坐标系的选取是否都选取了屏幕坐标系,第二个原因是主角bitmap在屏幕中的坐标跟屏幕的density 有关。
density = android中图片宽:pc中图片宽 = 1.5

event.getRawY()//得到触摸点在屏幕中的坐标


private void drawImage(Canvas canvas, int x, int y,
			Bitmap bsrc, int sx, int sy, int w, int h) {
		Rect rect_src = new Rect();
		rect_src.left = sx;
		rect_src.right = sx + w;
		rect_src.top = sy;
		rect_src.bottom = sy + h;

		Rect rect_dst = new Rect();
		rect_dst.left = x;
		rect_dst.right = x + w;
		rect_dst.top = y;
		rect_dst.bottom = y + h;
		canvas.drawBitmap(bsrc, rect_src, rect_dst, null);

		rect_src = null;
		rect_dst = null;
	}//This function ignores the density associated with the bitmap. This is because the source and destination rectangle coordinate spaces are in their respective densities, so must already have the appropriate scaling factor applied.



最终解决方案:
public boolean onTouchEvent(MotionEvent event) {
		if (event.getAction() == MotionEvent.ACTION_DOWN) {
			// TODO Auto-generated method stub
			float y = event.getRawY()*3/2;
			float x = event.getRawX()*3/2;
			touch_y = y;
			touch_x = x;
			// 按ship上方
			if ((int) y < (Ship.ship_screen_ypos)) {
				Ship.changeShipState(1);
				Ship.ship_screen_ypos -= Ship.ship_height;
			} else if ((int) y > Ship.ship_screen_ypos+Ship.ship_height) {
				// 按ship下方
				Ship.changeShipState(2);
				Ship.ship_screen_ypos += Ship.ship_height;
			}
			
			if((int)x>(Ship.ship_screen_xpos+Ship.ship_width)){
				// 加速
				ConstantUtil.SPEED+=5;
			}else if((int)x<Ship.ship_screen_xpos){
				// 减速
				ConstantUtil.SPEED-=5;
			}
		}
		return true;
	}
分享到:
评论

相关推荐

    android截屏和向屏幕发点击坐标

    本文将详细讲解如何实现Android设备的截屏操作,以及如何通过编程方式向屏幕发送点击坐标,模拟用户触摸事件。 一、Android截屏 1. **系统自带截屏**:Android设备通常都提供了快捷键进行截屏,通常是同时按下电源...

    获取点击位置的颜色

    以上就是关于“获取点击位置的颜色”这一知识点的详细介绍,包括了Android中触摸事件的处理、坐标转换、屏幕截图以及像素颜色的获取和处理。在实际开发中,这个功能可以应用于各种场景,比如颜色检测、颜色选择器等...

    android坐标画矩形

    在Android开发中,坐标画矩形是一项基本的图形绘制任务,尤其在进行用户交互或游戏开发时非常常见。本课程设计旨在教你如何通过输入坐标在Android应用的画布上绘制矩形,并且提供了Eclipse IDE作为开发环境。下面将...

    Android中屏幕触摸轨迹的绘制、保存与播放

    在“Android中屏幕触摸轨迹的绘制、保存与播放”这一主题中,我们将深入探讨如何实现这一功能。这个项目可能包含一个名为`TouchDrawOnBitmapDemo`的示例应用,该应用允许用户在图片上绘制他们的触摸轨迹,并能够保存...

    android 3D坐标旋转

    在Android开发中,3D坐标旋转是一个重要的图形处理技术,常用于实现动态界面效果和复杂的用户交互。这个“android 3D坐标旋转”主题主要涵盖了如何在Android平台上使用OpenGL ES进行3D对象的旋转操作。OpenGL ES是...

    android实现屏幕画笔工具

    在Android平台上实现一个屏幕画笔工具,涉及到许多关键的技术点,包括图形绘制、触摸事件处理、用户交互设计等。下面将详细阐述这些知识点。 首先,Android的图形绘制主要依赖于Canvas和Paint对象。Canvas提供了...

    Android代码-触摸屏幕产生小气泡的效果应用源码.zip

    在Android开发中,实现触摸屏幕产生小气泡效果是一种常见的用户交互设计,它可以提升应用程序的趣味性和用户体验。这个源码示例主要展示了如何利用Android的Canvas、MotionEvent和动画类来创建这种效果。下面我们将...

    Android 触摸屏幕产生小气泡的效果应用源码.zip

    6. **布局集成**:将自定义的气泡View添加到Activity或Fragment的布局文件中,设置合适的宽高和属性,确保气泡可以在屏幕上正确显示。 7. **多点触控支持**:如果需要支持同时出现多个气泡,需要处理多点触控事件,...

    android区域性屏幕截图

    在Android开发中,有时我们需要对屏幕的特定区域进行截图,而不是整个屏幕,这在比如用户头像选择、游戏截图分享等功能中非常常见。这个“android区域性屏幕截图”项目提供了解决此类需求的代码实现,已经经过测试并...

    Android触摸事件如何实现笔触画布详解

    在Android开发中,用户交互是应用程序的核心部分,而触摸事件是实现用户与屏幕之间互动的主要方式。本文将详细介绍如何利用Android触摸事件实现笔触在画布上绘制。我们将从基础实现开始,逐步升级到更高级的功能,...

    android下触摸按键模拟截屏取色

    在Android系统中,触摸按键模拟、截屏以及抓取颜色是常见的开发需求,尤其是在自动化测试、辅助工具或者个性化应用中。下面将详细讲解这些功能的实现原理和源代码中的关键点。 一、触摸按键模拟 触摸按键模拟在...

    android触摸时扭曲变形图片照片,图片特效

    例如,当检测到触摸事件时,可以计算出触摸点在Bitmap上的坐标,然后对周围的像素进行变形处理。 一种常见的扭曲算法是使用网格(Mesh)变形。在Android中,可以创建一个二维网格覆盖在Bitmap上,每个网格节点对应...

    android笔画回放

    在Android开发中,"android笔画回放"是一个有趣且实用的功能,它允许用户在屏幕上进行书写或绘画,然后系统能够记录并回放这些笔画的动作。这一特性常见于绘图应用、教育软件或者笔记应用中,为用户提供了一种交互式...

    触摸屏幕实现拖尾效果

    这个方法会接收到一系列的MotionEvent对象,这些对象包含了触摸事件的类型(ACTION_DOWN、ACTION_MOVE、ACTION_UP等)以及触摸坐标等信息。 1. **ACTION_DOWN**:手指首次接触屏幕时触发,此时可以记录下触点的初始...

    Android自定义View实现屏幕手写签名

    在Android中,可以通过重写View的`onTouchEvent()`方法,根据事件的ACTION_DOWN, ACTION_MOVE和ACTION_UP来判断用户的触控行为,构建连续的坐标点序列,形成签名路径。 4. **保存为图片**:完成签名后,用户可能...

    Android点击屏幕,在点击的位置出来一颗桃心

    当用户在屏幕上点击时,系统会生成一系列的MotionEvent对象,包括ACTION_DOWN(手指按下)、ACTION_MOVE(手指移动)和ACTION_UP(手指抬起)等。我们通常在Activity或Fragment的onTouchEvent()方法中捕获并处理这些...

    图片合成以及动态生成View移动后的坐标记录

    移动视图意味着改变其在屏幕上的位置。在Android,我们可以通过设置View的layoutParams来改变其left、top、right和bottom边界。在iOS,可以调整视图的frame属性,或使用Auto Layout的约束来更新视图的位置。 总结来...

    Android 多点触控与简单手势

    在Android平台上,多点触控(Multi-Touch)和简单手势是移动应用开发中的关键功能,使得用户可以通过手指与屏幕进行交互,实现丰富的操作体验。本文将深入探讨如何在Android应用中实现图片的拖动和缩放功能。 一、...

    android拖动小球demo

    1. **Android触摸事件处理**: Android系统通过`MotionEvent`类来处理触摸事件。在`onTouchEvent()`方法中,我们可以捕获用户触摸屏幕的开始(ACTION_DOWN)、移动(ACTION_MOVE)和结束(ACTION_UP)等动作。在本...

    Android手绘路径,获取点集,曲线运动

    1. **Canvas与MotionEvent**: Canvas是Android图形系统中的核心组件,它提供了在Bitmap上绘图的能力。在手绘路径时,我们通常会在SurfaceView或者Custom View中重写`onDraw()`方法,使用Canvas来绘制线条。而...

Global site tag (gtag.js) - Google Analytics