【发布时间】:2016-01-29 20:45:59
【问题描述】:
我在创建一种视图时遇到了麻烦。假设我正在尝试创建类似于时钟的东西。这意味着我们必须将数字定位在与中心的距离和角度。
我试图模拟一种定位两个元素的方法。一个中心 ImageView 和一个时钟编号。在 XML 中我有类似的东西:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/lyt_rootView"
android:orientation="vertical"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:id="@+id/ivCenter"
android:background="@drawable/cid"/>
<ImageView
android:layout_width="50dp"
android:layout_height="50dp"
android:id="@+id/ivNumber"
android:background="@drawable/add_big"
android:layout_marginLeft="-50dp"
android:layout_marginTop="50dp"/>
</RelativeLayout>
而且效果很好,图像设置为应有的状态,将第一张图像 (ivCenter) 完全居中,并从中心留出一些边距以定位第二张图像。
现在我必须以编程方式执行相同的操作,以便创建大量模拟数字的图像视图。所以我有这个代码:
RelativeLayout lyt = (RelativeLayout) findViewById(R.id.lyt_rootView);
int avatarSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 70, getResources().getDisplayMetrics());
int distance = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 50, getResources().getDisplayMetrics());
// center image
ImageView ivImageCenter = new ImageView(this);
ivImageCenter.setImageResource(R.drawable.cid);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(avatarSize,avatarSize);
lyt.addView(ivImageCenter, lp);
// first image (simulating a number in a clock)
ImageView ivNumber1 = new ImageView(this);
ivNumber1.setImageResource(R.drawable.add_big);
RelativeLayout.LayoutParams lp2 = new RelativeLayout.LayoutParams(avatarSize,avatarSize);
lp2.setMargins(distance, distance, 0, 0);
lyt.addView(ivNumber1, lp2);
但结果与 XML 示例不同。我没有看到我错过了什么。以编程方式创建视图的结果是两个 imageView 试图定位在屏幕的中心空间中,从而使第一个图像不在屏幕的中心。
我错过了什么?
【问题讨论】:
标签: java android xml imageview position