2011-12-09 6 views
0

私は他の人の距離と方向を得ることができるプログラムを実装しました。この情報を、他の人の方向(針のような)を指す動的な矢印で表示し、ユーザーが携帯電話を動かすと、矢印がその方向を変えて、他の人の方向を示します。 これは、次のように実装されます:アクティビティは、他の人の方向(0 < = x < = 360)を矢印をグラフィックで表示するタスクに渡します。 私は方位角の値を知る方法を知っており、それによって特定の方向の値(x)に対する矢印の回転の度合いを計算します。私は実装のロジックを知っていますが、グラフィック、アニメーションなどについては何も知識がありません。地球上の特定の場所を指す動的な矢印を描く

クイックヘルプは高く評価されています。

+0

OK ...何とか正確な要件を満たすだろう解決策を見つけることができたが、いくつかの時間後に解決策を掲載します投稿のクエストの8時間。良い答えが待っているが.. –

答えて

0

これは要件を満たすコードです。私は知らないが、より良い解決策は存在する可能性があります - 私は前に掲示することは許されないのですよう

 package com.visd.giraffe; 

     import android.app.Activity; 
     import android.graphics.Bitmap; 
     import android.graphics.BitmapFactory; 
     import android.graphics.Matrix; 
     import android.graphics.drawable.BitmapDrawable; 
     import android.hardware.Sensor; 
     import android.hardware.SensorEvent; 
     import android.hardware.SensorEventListener; 
     import android.hardware.SensorManager; 
     import android.os.Bundle; 
     import android.util.Log; 
     import android.widget.ImageView; 
     import android.widget.TextView; 


     public class arrowhandler extends Activity implements SensorEventListener { 


     Matrix mtx = new Matrix(); 
     ImageView img; 
     Bitmap bmp ; 
     int w,h; 
     float d = 0; 
     float oldval = 0,currentrot = 0, rotate = 0,senserotat; 

     private SensorManager sensorManager = null; 

      /** Called when the activity is first created. */ 
      @Override 
      public void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       // Get a reference to a SensorManager 
       sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); 
       setContentView(R.layout.mmmain); 
       String[] arrs = getIntent().getExtras().getStringArray("SMSR"); 
       int degr = arrs[0].indexOf("Dgr:"); 
       String msgg = "Location of " + arrs[0].substring((arrs[0].indexOf("nosss"))+5) + "\n\n" + arrs[0].substring(0, degr); 
       Log.d("AOA",arrs[0].substring(degr+4)); 
       d = (Float.valueOf(arrs[0].substring(degr+4, arrs[0].indexOf("nosss")))).floatValue(); 
       Log.d("AOA dv", Float.toString(d)); 
       if (d>0) 
       { 
        d = d+180; 
       } 
       else if (d<0) 
       { 
        d = 180 - (Math.abs(d)); 
       } 
       Log.d("AOA dv", "2" + Float.toString(d)); 
       Log.d("AOA",Float.toString(d)); 
       TextView t = (TextView) findViewById(R.id.textView1); 
       t.setText(msgg);   

       img=(ImageView)findViewById(R.id.imageView1); 
       bmp = BitmapFactory.decodeResource(getResources(), R.drawable.bluearrow); 
       // Getting width & height of the given image. 
       w = bmp.getWidth(); 
       h = bmp.getHeight(); 



       } 

      // This method will update the UI on new sensor events 
      public void onSensorChanged(SensorEvent sensorEvent) { 
      synchronized (this) { 
      if (sensorEvent.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { 

      } 

      if (sensorEvent.sensor.getType() == Sensor.TYPE_ORIENTATION) { 



       senserotat = d-sensorEvent.values[0]; 
       if (senserotat < 0) 
       { 
        senserotat = 360 - (Math.abs(senserotat)); 
       } 
        rotate = (360-currentrot)+senserotat; 
        if (rotate>360) 
        { 
         rotate = rotate-360; 
        } 
        mtx.postRotate(rotate); 
        // Rotating Bitmap 
        Bitmap rotatedBMP = Bitmap.createBitmap(bmp, 0, 0, w, h, mtx, true); 
        BitmapDrawable bmd = new BitmapDrawable(rotatedBMP); 

        img.setImageDrawable(bmd); 
        currentrot = senserotat; 
        //Log.d("TTTT", Float.toString(sensorEvent.values[0])); 


      } 
      } 

      } 


      public void onAccuracyChanged(Sensor arg0, int arg1) { 
     // TODO Auto-generated method stub 

     } 

      @Override 
      protected void onResume() { 
      super.onResume(); 
      // Register this class as a listener for the accelerometer sensor 
      sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL); 
      // ...and the orientation sensor 
      sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_NORMAL); 
      } 

      @Override 
      protected void onStop() { 
      // Unregister the listener 
      sensorManager.unregisterListener(this); 
      super.onStop(); 
      } 

     } 
関連する問題