我是靠谱客的博主 负责跳跳糖,最近开发中收集的这篇文章主要介绍Android开发-Sensor传感器-AndroidStudio(二)小方,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

转载请注明出处: http://blog.csdn.net/iwanghang/article/details/53418690

我正在参加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) + "pixelsn"; 
    	   str += "The absolute heightin:" + String.valueOf(screenHeight) + "pixelsn"; 
    	   str += "The logical density of the display.:" + String.valueOf(density) 
    	   + "n"; 
    	   str += "X dimension :" + String.valueOf(xdpi) + "pixels per inchn"; 
    	   str += "Y dimension :" + String.valueOf(ydpi) + "pixels per inchn"; 
    	  
    	   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(二)小方所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部