Ich habe einen FrameLayout, in dem ich habe 2 Kontrollen: - eine benutzerdefinierte Ansicht, die ein Bild zieht und einen Text auf es - ein Textview mit einem TextAndroid Ansicht Zentrum in FrameLayout funktioniert nicht
Ich mag um beide im FrameLayout zu zentrieren, aber ich schaffe es nicht. Das Texview ist genau zentriert, meine cusom Ansicht bleibt auf der linken Seite, wenn ich es sichtbar mache.
<FrameLayout android:id="@+id/CompassMap"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center">
<view class="com.MyView"
android:id="@+id/myView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|center_horizontal"
android:visibility="gone"/>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|center_horizontal"
android:text="CENTERED" />
</FrameLayout>
Um Mathias, ich mache nichts im Konstruktor, es ist nur einfach
public class MyMapView extends View {
private int xPos = 0;
private int yPos = 0;
private Bitmap trackMap;
private Matrix backgroundMatrix;
private Paint backgroundPaint;
private Bitmap position;
private Matrix positionMatrix;
private Paint positionPaint;
public MyMapView(Context context) {
super(context);
init(context, null);
}
public MyMapView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}
public MyMapView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context, attrs);
}
private void init(final Context context, AttributeSet attrs) {
backgroundMatrix = new Matrix();
backgroundPaint = new Paint();
backgroundPaint.setFilterBitmap(true);
position = BitmapFactory.decodeResource(getContext().getResources(), R.drawable.position);
positionMatrix = new Matrix();
positionPaint = new Paint();
positionPaint.setFilterBitmap(true);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.getSize(heightMeasureSpec));
}
@Override
protected void onDraw(Canvas canvas) {
int width = getMeasuredWidth();
int height = getMeasuredHeight();
if (trackMap!=null)
{
Bitmap resizedBitmap = Bitmap.createScaledBitmap(trackMap, height, height, true);
canvas.drawBitmap(resizedBitmap, backgroundMatrix, backgroundPaint);
}
canvas.save(Canvas.MATRIX_SAVE_FLAG);
canvas.translate(xPos-position.getWidth()/2, yPos-position.getHeight()/2);
canvas.drawBitmap(position, positionMatrix, positionPaint);
canvas.restore();
}
public void updatePosition(int xpos, int ypos, Bitmap trackImage)
{
xPos=xpos;
yPos=ypos;
trackMap = trackImage;
invalidate();
}
}
Wohin wird Ihre benutzerdefinierte Ansicht erweitert? Sicher, Sie behandeln die Parameter in Ihrem Konstruktor? –
Gibt es einen besonderen Grund, dass Sie ein FrameLayout verwenden müssen und das TextView über der Ansicht angezeigt wird? –
Ja, das FrameLayout lässt dich das nicht machen. Es ist wirklich nur für das Halten einer einzigen Ansicht. Wenn Sie mehr als das hinzufügen, wird es genau das Verhalten haben, das Sie erwähnen, es fügt einfach Elemente in einem vertikalen Stapel hinzu, indem Sie oben links pinnen. http://developer.android.com/reference/android/widget/FrameLayout.html – plainjimbo