如何在android

时间:2016-04-12 17:47:17

标签: java android android-layout

我正在使用Android应用程序,我需要将手机的加速度计值(X,Y,Z)显示在textviews中。我试图在烤面包上显示它并且它有效但不能用于textviews。

这是我的代码:

///这是我的主页:

package com.sourcey.materiallogindemo;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import android.widget.Toast;

public class MainAccelerometer extends Activity implements AccelerometerListener{



private TextView mTxtViewX;
private TextView mTxtViewY;
private TextView mTxtViewZ;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_accelerometer);
    mTxtViewX = (TextView) findViewById(R.id.textX);
    mTxtViewY = (TextView) findViewById(R.id.textY);
    mTxtViewZ = (TextView) findViewById(R.id.textZ);

    Intent intent = getIntent();
    // Check onResume Method to start accelerometer listener
}

public void onAccelerationChanged(float x, float y, float z) {
    // TODO Auto-generated method stub

}

public void onShake(float force) {

    // Called when Motion Detected
    Toast.makeText(getBaseContext(), "Motion detected",
            Toast.LENGTH_LONG).show();

}

@Override
public void onResume() {
    super.onResume();
    Toast.makeText(getBaseContext(), "onResume Accelerometer Started",
            Toast.LENGTH_LONG).show();

    //Check device supported Accelerometer senssor or not
    if (AccelerometerManager.isSupported(this)) {

        //Start Accelerometer Listening
        AccelerometerManager.startListening(this);
    }
}

@Override
public void onStop() {
    super.onStop();

    //Check device supported Accelerometer senssor or not
    if (AccelerometerManager.isListening()) {

        //Start Accelerometer Listening
        AccelerometerManager.stopListening();

        Toast.makeText(getBaseContext(), "onStop Accelerometer Stoped",
                Toast.LENGTH_LONG).show();
    }

}


@Override
public void onDestroy() {
    super.onDestroy();
    Log.i("Sensor", "Service  distroy");

    //Check device supported Accelerometer senssor or not
    if (AccelerometerManager.isListening()) {

        //Start Accelerometer Listening
        AccelerometerManager.stopListening();

        Toast.makeText(getBaseContext(), "onDestroy Accelerometer Stoped",
                Toast.LENGTH_LONG).show();
    }

}

}

这是我想要进行显示的AccelerometerManager活动

import android.content.Context;
import android.graphics.Color;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.widget.TextView;
import android.widget.Toast;

import java.util.List;



public class AccelerometerManager  {



static Context aContext=null;


/** Accuracy configuration */
private static float threshold  = 15.0f;
private static int interval     = 200;

private static Sensor sensor;
private static SensorManager sensorManager;
// you could use an OrientationListener array instead
// if you plans to use more than one listener

private static AccelerometerListener listener;

/** indicates whether or not Accelerometer Sensor is supported */
private static Boolean supported;
/** indicates whether or not Accelerometer Sensor is running */
private static boolean running = false;

/**
 * Returns true if the manager is listening to orientation changes
 */
public static boolean isListening() {
    return running;
}

/**
 * Unregisters listeners
 */
public static void stopListening() {
    running = false;
    try {
        if (sensorManager != null && sensorEventListener != null) {
            sensorManager.unregisterListener(sensorEventListener);
        }
    } catch (Exception e) {}
}

/**
 * Returns true if at least one Accelerometer sensor is available
 */
public static boolean isSupported(Context context) {
    aContext = context;
    if (supported == null) {
        if (aContext != null) {


            sensorManager = (SensorManager) aContext.
                    getSystemService(Context.SENSOR_SERVICE);

            // Get all sensors in device
            List<Sensor> sensors = sensorManager.getSensorList(
                    Sensor.TYPE_ACCELEROMETER);

            supported = new Boolean(sensors.size() > 0);



        } else {
            supported = Boolean.FALSE;
        }
    }
    return supported;
}

/**
 * Configure the listener for shaking
 * @param threshold
 *             minimum acceleration variation for considering shaking
 * @param interval
 *             minimum interval between to shake events
 */
public static void configure(int threshold, int interval) {
    AccelerometerManager.threshold = threshold;
    AccelerometerManager.interval = interval;
}

/**
 * Registers a listener and start listening
 * @param accelerometerListener
 *             callback for accelerometer events
 */
public static void startListening( AccelerometerListener accelerometerListener )
{

    sensorManager = (SensorManager) aContext.
            getSystemService(Context.SENSOR_SERVICE);

    // Take all sensors in device
    List<Sensor> sensors = sensorManager.getSensorList(
            Sensor.TYPE_ACCELEROMETER);

    if (sensors.size() > 0) {

        sensor = sensors.get(0);

        // Register Accelerometer Listener
        running = sensorManager.registerListener(
                sensorEventListener, sensor,
                SensorManager.SENSOR_DELAY_GAME);

        listener = accelerometerListener;
    }


}

/**
 * Configures threshold and interval
 * And registers a listener and start listening
 * @param accelerometerListener
 *             callback for accelerometer events
 * @param threshold
 *             minimum acceleration variation for considering shaking
 * @param interval
 *             minimum interval between to shake events
 */
public static void startListening(
        AccelerometerListener accelerometerListener,
        int threshold, int interval) {
    configure(threshold, interval);
    startListening(accelerometerListener);
}

/**
 * The listener that listen to events from the accelerometer listener
 */
private static SensorEventListener sensorEventListener =
        new SensorEventListener() {



            private long now = 0;
            private long timeDiff = 0;
            private long lastUpdate = 0;
            private long lastShake = 0;

            private float x = 0;
            private float y = 0;
            private float z = 0;
            private float lastX = 0;
            private float lastY = 0;
            private float lastZ = 0;
            private float force = 0;

            public void onAccuracyChanged(Sensor sensor, int accuracy) {}

            public void onSensorChanged(SensorEvent event) {
                // use the event timestamp as reference
                // so the manager precision won't depends
                // on the AccelerometerListener implementation
                // processing time
                now = event.timestamp;

                x = event.values[0];
                y = event.values[1];
                z = event.values[2];

                // if not interesting in shake events
                // just remove the whole if then else block
                if (lastUpdate == 0) {
                    lastUpdate = now;
                    lastShake = now;
                    lastX = x;
                    lastY = y;
                    lastZ = z;
                    Toast.makeText(aContext, "No Motion detected", Toast.LENGTH_SHORT).show();

                } else {
                    timeDiff = now - lastUpdate;

                    if (timeDiff > 0) {

                /*force = Math.abs(x + y + z - lastX - lastY - lastZ)
                            / timeDiff;*/
                        force = Math.abs(x + y + z - lastX - lastY - lastZ);

                        if (Float.compare(force, threshold) >0 ) {
                            //Toast.makeText(Accelerometer.getContext(), (now-lastShake)+"  >= "+interval, 1000).show();
                            if (now - lastShake >= interval) {

                                // trigger shake event
                                listener.onShake(force);



                               // AXE X
                                String sx= String.valueOf(x);
                                Toast toast1=Toast.makeText(aContext,"X="+sx, Toast.LENGTH_SHORT);
                                TextView mTxtViewX = (TextView) toast1.getView().findViewById(android.R.id.message);
                                mTxtViewX.setTextColor(Color.GREEN);
                                //toast1.show();
                                mTxtViewX.setText(sx);

                                // AXE Y
                                String sy= String.valueOf(y);
                                Toast toast2= Toast.makeText(aContext,"Y="+ sy, Toast.LENGTH_SHORT);
                                TextView mTxtViewY = (TextView) toast2.getView().findViewById(android.R.id.message);
                                mTxtViewY.setTextColor(Color.RED);
                                //toast2.show();
                                mTxtViewY.setText(sy);


                               // AXE Z
                                String sz= String.valueOf(z);
                                Toast toast3= Toast.makeText(aContext, "Z=" + sz, Toast.LENGTH_SHORT);
                                TextView mTxtViewZ = (TextView) toast3.getView().findViewById(android.R.id.message);
                                mTxtViewZ.setTextColor(Color.BLACK);
                                //toast3.show();
                                mTxtViewZ.setText(sz);



                            }
                            else
                            {
                                Toast.makeText(aContext,"No Motion detected", Toast.LENGTH_SHORT).show();

                            }
                            lastShake = now;
                        }
                        lastX = x;
                        lastY = y;
                        lastZ = z;
                        lastUpdate = now;
                    }
                    else
                    {
                        Toast.makeText(aContext,"No Motion detected", Toast.LENGTH_SHORT).show();

                    }
                }
                // trigger change event
                listener.onAccelerationChanged(x, y, z);
            }

        };

}

这是我的xml文件

<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"
tools:context=".MainAccelerometer" >

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@color/primary_dark"
    android:text="Shake/Tilt Your Phone To Get Accelerometer Motion Alerts"
    android:id="@+id/textView"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:layout_alignParentTop="true" />
<TextView android:id="@+id/textX"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="12dp"
    android:background="@color/base"
    android:gravity="center"
    android:textSize="16dip"
    android:layout_above="@+id/textY"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<TextView android:id="@+id/textY"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="12dp"
    android:background="@color/abc_search_url_text_normal"
    android:gravity="center"
    android:textSize="16dip"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginBottom="166dp" />

<TextView android:id="@+id/textZ"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:padding="12dp"
    android:background="@color/accent_material_dark"
    android:gravity="center"
    android:textSize="16dip"
    android:layout_above="@+id/textX"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

</RelativeLayout>

4 个答案:

答案 0 :(得分:0)

您在查找视图时使用了错误的ID

android.R.id.message

使用您在xml上设置的ID。

textX
textY
textZ

答案 1 :(得分:0)

使用它在TextView中显示String

    mTxtViewX.setText("text to be displayed");
   mTxtViewY.setText("text to be displayed");
   mTxtViewZ.setText("text to be displayed");

警告检查所有TextView是否在findViewById中附加了正确的引用

答案 2 :(得分:0)

您可以尝试更新

中的TextViews

public void onAccelerationChanged(float x, float y, float z) { // TODO Auto-generated method stub }

答案 3 :(得分:0)

您必须找到正确的文本视图:

TextView mTxtViewX = (TextView) ((MainActivity)aContext).findViewById(R.id.textX);