2012-03-31 13 views
0

Ich habe einen Kompass in einer der Aktivitäten in meiner App erstellt und jetzt möchte ich diesen Kompass nehmen und in eine andere Aktivität einfügen. Es sollte sich wie nur eine andere Ansicht verhalten, aber seine Funktionalität beibehalten.Integrieren meines Kompasses in eine andere Aktivität

Gibt es eine Möglichkeit, eine Aktivität in eine andere einzubetten? Oder wäre es besser, einfach den Kompass in der Aktivität neu zu erstellen, in der er platziert werden soll?

Ich würde einen Screenshot hinzufügen, aber weil es ein Kompass ist, wird es ständig aktualisiert, was die Fähigkeit der DDMS dazu bringt, einen Screenshot zu machen, denke ich. Also erkläre ich: Die Kompasslinien, die von Norden nach Süden und von Westen nach Osten zeigen, sind über die gesamte Aktivität gemalt. Gibt es trotzdem etwas zu begrenzen und zu stoppen?

Update - das läuft nicht gut - ich kann den Kompass überhaupt nicht basierend auf den Ratschlägen erhalten. Also habe ich den Code, den ich verwende, um zu sehen, ob jemand Ideen hat?

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.new_compass_layout); 

    // New instance of our custom drawable view 
    mCustomDrawableView = new CustomDrawableView(this); 

    // Register the sensor listeners 
    mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 
    accelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
    magnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); 

    //******************************************** 
    // Test for adding a new view 
    RelativeLayout myLayout = (RelativeLayout)findViewById(R.id.reltveLayoutCmpss); 

    // Add layout parameters 
    LayoutParams testLayoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 
    mCustomDrawableView.setLayoutParams(testLayoutParams); 
    mCustomDrawableView.onMeasure(100, 100); 
    // Add it to the layout 
    myLayout.addView(mCustomDrawableView); 
    //******************************************** 

// More code in here - doesn't affect painting 

} 

// Drawable for my compass view 
public class CustomDrawableView extends View 
{ 
    @Override 
    protected void onMeasure(int widthMeasure, int heightMeasure) 
    { 
     this.setMeasuredDimension(widthMeasure, heightMeasure); 
    } 

    Paint paint = new Paint(); 

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

     paint.setColor(0xff00ff00); 
     paint.setStyle(Style.STROKE); 
     paint.setStrokeWidth(2); 
     paint.setAntiAlias(true);; 
    } 

    protected void onDraw(Canvas canvas) 
    { 
     // Get dimensions of the screen 
     int width = getWidth(); 
     int height = getHeight(); 
     int centerx = width/2; 
     int centery = height/2; 


     canvas.drawLine(centerx, 0, centerx, height, paint); 
     canvas.drawLine(0, centery, width, centery, paint); 

     if(azimuth != null) 
     { 
      canvas.rotate(-azimuth * 360/(2*3.14159f), centerx, centery); 
      paint.setColor(0xff0000ff); 

      canvas.drawLine(centerx, -1000, centerx, +1000, paint); 
      canvas.drawLine(-1000, centery, 1000, centery, paint); 

      canvas.drawText("N - ^", centerx+5, centery-10, paint); 
      canvas.drawText("S - v", centerx-10, centery+15, paint); 

      paint.setColor(0xff00ff00); 
     } 
    } 
} 

Können Sie tatsächlich onMeasure() und setMeasuredDimension() in einer Ansicht verwenden, die Farbe verwendet? Danke

+0

Ist Ihr Kompass eine Ansicht? Wenn nicht, machen Sie es zu einem View, damit Sie es in allen Layouts verwenden können, unabhängig von Activty usw. – Freddroid

+0

Ich habe es gerade in eine Ansicht geschafft und dynamisch hinzugefügt - siehe mein Update oben – Katana24

+0

Wenn die Linien über die gesamte Aktivität gemalt sind , überprüfe die Grenzen deiner Ansicht, setze deine Kompassansichten korrekt auf Measure ein, um die Größe zu beschränken und zeichne deine Linien entsprechend der Größe der Ansicht, nicht auf dem Bildschirm. – Freddroid

Antwort

0

ActivityGroup/Fragment. Ich habe sie noch nie benutzt, frage nicht wie;)

Mit freundlichen Grüßen.

+0

Ich werde auf diese Weise aussehen, aber ich habe es geschafft, ich - ich musste den gesamten Code hinzufügen und verwenden Sie die LayoutParams, um es die Ansicht dynamisch hinzuzufügen – Katana24

Verwandte Themen