显示指南针在设备上的特定位置

时间:2012-03-05 17:09:05

标签: android

我想在特定位置的设备上显示指南针(图像视图)。我尝试在下面的代码中显示设备上的指南针视图,但事情是我需要在特定位置和小视图显示但只是它占据整个屏幕空间。你可以帮我在特定的位置修复指南针图像。使用这行代码我得到一个图像形式Drawable文件夹。 this.setImageResource(R.drawable.compassrose);那么如何在特定位置修复该图像。

Class1:-
         public class Compass extends Activity implements SensorListener {
  SensorManager sensorManager;
  static final int sensor = SensorManager.SENSOR_ORIENTATION;
  Rose rose;

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
//http://ofps.oreilly.com/titles/9781449390501/Android_System_Services.html
    // Set full screen view
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
//FLAG_FULLSCREEN    
//FLAG_SCALED
    rose = new Rose(this);

    setContentView(rose);

    // get sensor manager
    sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
  }

  // register to listen to sensors
  @Override
  public void onResume() {
    super.onResume();
    sensorManager.registerListener(this, sensor);
  }

  // unregister
  @Override
  public void onPause() {
    super.onPause();
    sensorManager.unregisterListener(this);
  }

  // Ignore for now
  public void onAccuracyChanged(int sensor, int accuracy) {
  }

  // Listen to sensor and provide output
  public void onSensorChanged(int sensor, float[] values) {
    if (sensor != Compass.sensor)
      return;
    int orientation = (int) values[0];
    rose.setDirection(orientation);
  }
}


Class 2:-
             public class Rose extends ImageView {
  Paint paint;
  int direction = 0;

  public Rose(Context context) {
    super(context);

    paint = new Paint();
    paint.setColor(Color.WHITE);
    paint.setStrokeWidth(2);
    paint.setStyle(Style.STROKE);

    this.setImageResource(R.drawable.compassrose);
  }

  @Override
  public void onDraw(Canvas canvas) {
    int height = this.getHeight();
    int width = this.getWidth();

    canvas.rotate(direction, width / 2, height / 2);
    super.onDraw(canvas);
  }

  public void setDirection(int direction) {
    this.direction = direction;
    this.invalidate();
  }

}

2 个答案:

答案 0 :(得分:2)

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    rose = new Rose(this);
    txtorientation = (TextView) findViewById(R.id.textView1);
    compassLayout = (RelativeLayout)findViewById(R.id.CompassLayout);
    compassLayout.addView(rose); 
    sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
    Log.d("Compass", "onCreated");
}

答案 1 :(得分:0)

您是否在询问如何在Android版面中定位ImageView?您是否尝试过使用XML,还是需要以编程方式设置?

如果您只想尝试定位ImageView,请尝试浏览一些布局教程:http://developer.android.com/resources/tutorials/views/index.html

如果没有,请在您的问题中添加更多详细信息