آموزش ساخت قطب نما در برنامه نویسی اندروید
سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش ساخت قطب نما در برنامه نویسی اندروید می پردازیم در این آموزش ما از sensor استفاده می کنیم تا قسمت اصلی یا عقربه اصلی جهت را به دست بیاریم در ادامه می توانید پیش نمایشی از آن را مشاهده می کنید با ما همراه باشید.
در ابتدا یک فایل به نام ACTIVITY_COMPASS.XML ایجاد کرده و کد زیر را در آن قرار دهید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <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="inducesmile.com.completeandroid.CompassActivity"> <TextView android:id="@+id/angle" android:text="@string/compass" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:textColor="@color/primary_text" android:textStyle="bold" android:textSize="24dp" android:layout_marginTop="32dp"/> <ImageView android:id="@+id/imageViewCompass" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:src="@drawable/compass" /> </RelativeLayout> |
حالا کد مربوط به آن همانند زیر می شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | import android.content.Context; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuItem; import android.view.animation.Animation; import android.view.animation.RotateAnimation; import android.widget.ImageView; import android.widget.TextView; public class CompassActivity extends AppCompatActivity implements SensorEventListener { private SensorManager sensorManager; private Sensor compass; private ImageView image; private TextView compassAngle; private float currentDegree = 0f; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_compass); image = (ImageView)findViewById(R.id.imageViewCompass); compassAngle = (TextView)findViewById(R.id.angle); sensorManager = (SensorManager)getSystemService(Context.SENSOR_SERVICE); compass = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT); if(compass != null){ sensorManager.registerListener(this, compass, SensorManager.SENSOR_DELAY_NORMAL); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_compass, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } @Override protected void onResume() { super.onResume(); sensorManager.registerListener(this, compass, SensorManager.SENSOR_DELAY_NORMAL); } @Override protected void onPause() { super.onPause(); sensorManager.unregisterListener(this); } @Override public void onSensorChanged(SensorEvent event) { float degree = Math.round(event.values[0]); compassAngle.setText("Heading: " + Float.toString(degree) + " degrees"); // create a rotation animation (reverse turn degree degrees) RotateAnimation ra = new RotateAnimation(currentDegree, -degree, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); // how long the animation will take place ra.setDuration(210); // set the animation after the end of the reservation status ra.setFillAfter(true); // Start the animation image.startAnimation(ra); currentDegree = -degree; } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { } } |
این آموزش هم به پایان رسید.
موفق و موید باشید.
چطور باید جهت قبله رو مشخص کرد؟؟؟
سلام آموزش در این مورد قرار میدهیم.
باید به جای Sensor.TYPE_LIGHT از سنسور Sensor.TYPE_ORIENTATION استفاده کنید.