2012-03-21 23 views
1

私は多くのコードを読んだことがありますが、加速度センサーを使ってイメージを動かす方法を理解できません。登録方法は分かりますが、実際に画像や形状の描画は、加速度計の軸に同期して動く、私はこれを行うにはAndroidのJavaを使用しています。私が本当に苦労しているので、誰かが私を助けてくれるの?あなたの時間と助けてくれてありがとう。加速度計のコードを理解する助けが必要

答えて

1

だから、ここリスナーを登録するためのコードは、(私はあなたがすでにこれをやったと知っているが、それは傷つけることはありません)です。

private void enableAccelerometerListening() { 
sensorManager = (SensorManager) getSystemService(COntext.SENSOR_SERVICE); 
sensorManager.registerListener(sensorEventListener), sensorManager.getDefaultSensor(
Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); 
} 

private void disableAccelerometerListening() { 
if (sensorManager != null) { 
sesnsorManager.unregisterListener(sensorEVentListener, sensorManager.getDefaultSensor(SensorManager.SENSOR_ACCELEROMETER)); 
sensorManager = null; 
}} 

あなたは自分のクラス宣言の下にカップルのフィールドが必要になります:ここでは

private SesnsorManager sensorManager; 
private float acceleration; 
private float currentAcceleration; 
private float lastAcceleration; 
private static final int ACCELERATION_THRESHOLD = 15000; 

は、あなたが助けを必要とするものに非常に近い取得するイベントハンドラ、次のとおりです。

private SensorEventListener sensorEventListener = new SensorEventListener() { 
    public void onSesnsorChanged(SensorEvent event) { 

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

lastAcceleration = currentAcceleration; //save previous accel value 

currentAcceleration = x*x + y*y + z*z; 

acceleration = currentAcceleration * (currentAcceleration - lastAcceleration); // calc the change in acceleration 

//if the accel is above a certain threshold: 
if (acceleration > ACCELERATION_THRESHOLD) { 
//MAKE YOUR CODE HERE THAT RESPONDS TO ACCELERATION EVENTS 
//Note, your accel threshold should be determined by trial and error on a number of devices 
} 
} 

public void onAccuracyChanged(Sensor sensor, int accuracy {} 

}; 
+0

あなたの返事ありがとう私は現在、あなたのコードを見渡して理解しています。役立つなら、私はあなたの答えをマークアップします – user1169775

+0

それは働いたように見えます:) – Davek804

0

また、私はあなたのアニメーションのニーズの一部に取り組もうとしますが、私はこの分野ではまだまだ不安です。あなたがしなければならないことは、加速度計が動きを検出するにつれて画像を動かすことだと思います。画像は加速度計ではなくアニメーションを介して直接移動する必要があります。そう、「スポット」はあなたのイメージです、よろしいですか? (両方とも以下のコードは、スポットを追加し、直接、加速度計に縛られていないそのアニメーションを(設定したが、私は、これはそれにもかかわらず役に立つことを願っています):

public void addSpot() { 

int x = random.nextInt(viewWidth - SPOT_DIAMETER); 
int y = random.nextInt(viewHeight = SPOT_DIAMETER); 
int x2 = random.nextInt(viewWidth - SPOT_DIAMETER); 
int y2 = random.nextInt(viewWidth - SPOT_DIAMETER); 

final ImageView spot = (ImageView) layoutFinlater.inflate(R.layout.untouched, null); 
spot.setLayoutParams(new RelativeLayout.LayoutParams(SPOT_DIAMETER, SPOT_DIAMETER)); 
spot.setX(x); 
spot.setY(y); 

さて、右ここで私はあなたが始めることができると思うところであります

あなたは上記の私の他の応答で見たように、

if (acceleration > ACCELERATION_THRESHOLD) { 
spot.animate().x(x2).y(y2).setDuration(animationTime); 

animationTimeはちょうどあなたが適切であると感じ、そして世話をすることを忘れないでください(ミリ秒)何かになります...加速度センサーイベントで何かをやって必要なパッケージをインポートする。

関連する問題