您好我已经编写了此代码,用ImageView和加速度计移动一个简单的球,但不起作用。 我使用过ball.scrollTo(xa,ya),但这段代码不适用于变量捕捉加速度计
发布我的代码:
Main.java
package com.crowley.test;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.widget.ImageView;
import android.widget.TextView;
import android.util.Log;
public class Main extends Activity implements SensorEventListener {
final String tag = "AccLogger";
SensorManager sensore=null;
TextView x=null;
TextView y=null;
TextView z=null;
TextView xat=null;
TextView yat=null;
String a;
String b;
private ImageView ball;
int xa=0;
int ya=0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
sensore = (SensorManager) getSystemService(SENSOR_SERVICE);
x= (TextView) findViewById(R.id.x);
y= (TextView) findViewById(R.id.y);
z= (TextView) findViewById(R.id.z);
xat= (TextView) findViewById(R.id.textView1);
yat= (TextView) findViewById(R.id.textView2);
ball = (ImageView) findViewById(R.id.ball);
ball.scrollTo(xa, ya);
ball.setImageResource(R.drawable.ball);
}
public void onSensorChanged(SensorEvent event){
Sensor sensor = event.sensor;
float [] values = event.values;
synchronized (this) {
Log.d(tag, "onSensorChanged: " + sensor + ", x: " +
values[0] + ", y: " + values[1] + ", z: " + values[2]);
if (sensor.getType() == Sensor.TYPE_ACCELEROMETER ) {
x.setText("x"+ values[0]);
y.setText("y"+ values[1]);
z.setText("z"+ values[2]);
xa=(int)values[0];// this part of code is only test to see int x and y on Activity
ya=(int)values[1];
a=Integer.toString(xa);
b=Integer.toString(ya);
xat.setText(a);
yat.setText(b);
//x.setText("x"+ SensorManager.DATA_X);
//y.setText("y"+ SensorManager.DATA_Y);
//z.setText("z"+ SensorManager.DATA_Z);
}
}
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
Log.d(tag,"onAccuracyChanged: " + sensor + ", accuracy: " + accuracy);
}
protected void onResume() {
super.onResume();
Sensor Accel = sensore.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
// register this class as a listener for the orientation and accelerometer sensors
sensore.registerListener((SensorEventListener) this, Accel, SensorManager.SENSOR_DELAY_FASTEST);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
和我的main.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" >
<TextView
android:id="@+id/x"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginTop="16dp"
android:text="" />
<TextView
android:id="@+id/y"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/x"
android:text="" />
<TextView
android:id="@+id/z"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/y"
android:text="" />
<ImageView
android:id="@+id/ball"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ball" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginBottom="71dp"
android:layout_marginRight="66dp"
android:text="TextView" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@+id/textView1"
android:layout_alignTop="@+id/textView1"
android:layout_marginTop="35dp"
android:text="TextView" />
</RelativeLayout>
答案 0 :(得分:2)
当传感器发生变化时,您不会改变球的位置。
我没有测试过,但你应该这样做:
在onSensorChanged()
末尾添加ball.scrollBy(xa, ya);
或类似内容。
您拨打了ball.scrollTo(x,y);
onCreate()
中的{{1}},但是一旦您的传感器开始报告,您根本不会移动球。
答案 1 :(得分:0)
你做错了两件事。 您没有移动ImageView。您只能在onCreate()方法中设置其坐标。你应该一直设置它 - 在onSensorChanged方法中。
其次,你不应该使用scrollTo,而是offsetLeftAndRight(int offset)
&amp; offsetTopAndBottom(int offset)
并在invalide()
方法结束时调用球。onSensorChanged
。