Android开发-Sensor传感器-AndroidStudio(二)小方
2016-12-01 10:12
381 查看
转载请注明出处:http://blog.csdn.net/iwanghang/article/details/53418690
我正在参加CSDN 2016博客之星评选,希望得到您的宝贵一票~
http://blog.csdn.net/vote/candidate.html?username=iwanghang
请为我投票,谢谢 ~~
如果没有CSDN账号 直接使用微信/QQ/微博登陆 就能投票了~~
用传感器做一个小方块自由移动,以屏幕为边界~
既然是以屏幕为边界,那么左上角肯定是坐标0,0,右下角如何获取呢
就要用到Displaymetrics 取得手机屏幕大小的关键类,
我用一段代码我具体表示一下如何获取屏幕大小,请看:
其实,很多时候,我们做屏幕适配的时候,获取屏幕大小会比较有用~
之前打算写一篇屏幕适配的博文,但是想了想,可以说的内容太少了~
做为一个Android的新手,屏幕适配会用,但是实际上经手过的需要屏幕适配的项目还没有
所以迟迟没写,等有了相关经验一定写一下屏幕适配~
注意这个Demo没有计算状态栏和标题栏的高度,所以要去掉/隐藏状态栏和标题栏
我这边用真机测试,所以用别人手机拍了一个MP4,又用GifCam抓取变成GIF,但是大小为8M上传不了
我的同事用PS,帮我转换了一下颜色深度和大小,才勉强变成2M以内,我同事的博客http://blog.csdn.net/sundayaaron
项目源码下载(免积分):http://download.csdn.net/detail/iwanghang/9698771
我们看一下动态GIF图和代码
MainActivity.java:
Rect.java:
RectView.java:
avtivity_main.xml:
转载请注明出处:http://blog.csdn.net/iwanghang/article/details/53418690
欢迎移动开发爱好者交流
沈阳或周边城市公司有意开发Android,请与我联系
联系方式
微信:iwanghang
QQ:413711276
邮箱:iwanghang@qq.com
我正在参加CSDN 2016博客之星评选,希望得到您的宝贵一票~
http://blog.csdn.net/vote/candidate.html?username=iwanghang
请为我投票,谢谢 ~~
如果没有CSDN账号 直接使用微信/QQ/微博登陆 就能投票了~~
用传感器做一个小方块自由移动,以屏幕为边界~
既然是以屏幕为边界,那么左上角肯定是坐标0,0,右下角如何获取呢
就要用到Displaymetrics 取得手机屏幕大小的关键类,
我用一段代码我具体表示一下如何获取屏幕大小,请看:
public static String getDisplayMetrics(Context cx) { String str = ""; DisplayMetrics dm = new DisplayMetrics(); //取得DisplayMetrics对象方法一 //dm = cx.getApplicationContext().getResources().getDisplayMetrics(); //取得DisplayMetrics对象方法二 ((Activity)cx).getWindowManager().getDefaultDisplay().getMetrics(dm); int screenWidth = dm.widthPixels; int screenHeight = dm.heightPixels; float density = dm.density; float xdpi = dm.xdpi; float ydpi = dm.ydpi; str += "The absolute width:" + String.valueOf(screenWidth) + "pixels\n"; str += "The absolute heightin:" + String.valueOf(screenHeight) + "pixels\n"; str += "The logical density of the display.:" + String.valueOf(density) + "\n"; str += "X dimension :" + String.valueOf(xdpi) + "pixels per inch\n"; str += "Y dimension :" + String.valueOf(ydpi) + "pixels per inch\n"; return str; }
其实,很多时候,我们做屏幕适配的时候,获取屏幕大小会比较有用~
之前打算写一篇屏幕适配的博文,但是想了想,可以说的内容太少了~
做为一个Android的新手,屏幕适配会用,但是实际上经手过的需要屏幕适配的项目还没有
所以迟迟没写,等有了相关经验一定写一下屏幕适配~
注意这个Demo没有计算状态栏和标题栏的高度,所以要去掉/隐藏状态栏和标题栏
我这边用真机测试,所以用别人手机拍了一个MP4,又用GifCam抓取变成GIF,但是大小为8M上传不了
我的同事用PS,帮我转换了一下颜色深度和大小,才勉强变成2M以内,我同事的博客http://blog.csdn.net/sundayaaron
项目源码下载(免积分):http://download.csdn.net/detail/iwanghang/9698771
我们看一下动态GIF图和代码
MainActivity.java:
package com.iwanghang.sensordemo2; import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.WindowManager; public class MainActivity extends AppCompatActivity { private RectView rv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //隐藏标题栏 getSupportActionBar().hide(); //取消状态栏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); // 获取屏幕宽高 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); rv = new RectView(this,dm.widthPixels,dm.heightPixels); setContentView(rv); SensorManager sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE); Sensor type_gravity = sm.getDefaultSensor(Sensor.TYPE_GRAVITY);// 重力传感器 sm.registerListener(new SensorEventListener() { @Override public void onSensorChanged(SensorEvent sensorEvent) { float x = sensorEvent.values[0]; float y = sensorEvent.values[1]; System.out.println("x = " + x + " + " + y); rv.rect.setLeft(Math.round(x)*10); rv.rect.setTop(Math.round(y)*10); rv.invalidate(); // 重绘 } @Override public void onAccuracyChanged(Sensor sensor, int i) { } },type_gravity,SensorManager.SENSOR_DELAY_NORMAL); } }
Rect.java:
package com.iwanghang.sensordemo2; /** * 小方块 对象 */ public class Rect { float left = 100, top = 100, right = 100, bottom = 100; private int width,height; public Rect(int width, int height) { this.width = width; this.height = height; left = width/2-right/2; top = height/2-bottom/2; } public float getLeft() { return left; } public void setLeft(float left) { this.left -= left; if (this.left<=0){ this.left = 0; }else if(this.left>=width-this.right){ this.left = width-this.right; } } public float getTop() { return top; } public void setTop(float top) { this.top += top; if (this.top<=0){ this.top = 0; }else if(this.top>=height-this.bottom){ this.top = height-this.bottom; } } public float getRight() { return right; } public void setRight(float right) { this.right = right; } public float getBottom() { return bottom; } public void setBottom(float bottom) { this.bottom = bottom; } }
RectView.java:
package com.iwanghang.sensordemo2; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.view.View; /** * 小方块 视图 */ public class RectView extends View{ Rect rect; private int widh,height; Paint paint; public RectView(Context context, int width, int height) { super(context); this.widh = width; this.height = height; paint = new Paint(); // 实例化画笔 paint.setColor(Color.GREEN); rect = new Rect(width,height); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawRect(rect.getLeft(),rect.getTop(),rect.getLeft()+rect.getRight(),rect.getTop()+rect.getBottom(),paint); } }
avtivity_main.xml:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.iwanghang.sensordemo2.MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> </RelativeLayout>
转载请注明出处:http://blog.csdn.net/iwanghang/article/details/53418690
欢迎移动开发爱好者交流
沈阳或周边城市公司有意开发Android,请与我联系
联系方式
微信:iwanghang
QQ:413711276
邮箱:iwanghang@qq.com
相关文章推荐
- Android开发-Sensor传感器-AndroidStudio(二)小方
- Android开发-Sensor传感器-AndroidStudio(一)摇一摇
- Android开发-Sensor传感器-AndroidStudio(一)摇一摇
- Android应用开发提高篇(3)-----传感器(Sensor)编程
- Android应用开发提高篇(3)-----传感器(Sensor)编程(转)
- Android应用开发提高篇(3)-----传感器(Sensor)编程
- [Android实例] Sensor传感器源码的阅读与应用开发简单实例
- Android之传感器系统(Gsensor)
- android sensor开发说明
- 【Android游戏开发十八】解放手指,利用传感器开发游戏!(本文讲解在SurfaceView中用重力传感器控制圆球的各方向移动)
- Android 传感器(Sensor)API教程 (六) 加速度传感器运用实例
- Android 传感器(Sensor)API教程 (五) 瞬间的加速度值取得
- Android开发教程之感应检测Sensor
- Android游戏开发之传感器
- Android之传感器系统(Gsensor)
- Android平台下传感器应用的开发--基础知识
- Android 传感器(Sensor)API教程 (七) 倾斜加速度
- 【Android2D游戏开发十八】解放手指,利用传感器开发游戏!(本文讲解在SurfaceView中用重力传感器控制圆球的各方向移动)
- 【Android游戏开发十八】解放手指,利用传感器开发游戏!(本文讲解在SurfaceView中用重力传感器控制圆球的各方向移动)
- 【Android游戏开发十八】解放手指,利用传感器开发游戏!(本文讲解在SurfaceView中用重力传感器控制圆球的各方向移动)