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
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
Ich habe es gerade in eine Ansicht geschafft und dynamisch hinzugefügt - siehe mein Update oben – Katana24
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