@Dan S,在这篇文章中给出了以下声明 - > display a still image map
然后使用第二个ImageView(用于指示器)将其绘制在顶部和 将它移动到屏幕上的正确位置,并确保 此视图中的背景是透明的以及背景 你的指标
如何为指标创建第二个ImageView?它应该是透明的imageview以及指标图像。
更新 我在这里询问如何重叠我的图像映射ImageView和透明指示器ImageView以标记当前位置。
答案 0 :(得分:1)
默认情况下,ImageView是透明的。 您的指标图像资源应具有透明背景(例如透明.PNG图像)。
只需将ImageView的imageResource或backgroundResource设置为PNG文件。
因此,您创建ImageView的代码将是这样的:
ImageView myImageView = new ImageView(context);
myImageView.setBackgroundColor(0x0); // not needed - it's the default
myImageView.setImageResource(R.drawable.indicator_icon);
但同样,这是默认设置,您仍然需要确保图像的背景是透明的,否则ImageView的背景无关紧要。
更新:关注@eros更新问题,这是一个更新的答案: 我能想到有两个选项可以实现将一个imageview定位在另一个上面:
我个人更喜欢第一个选项,因为未来的更改不会强迫您重新绘制指标。
这是一个演示选项(1)的课程:
public class MyMapView extends RelativeLayout {
private ImageView mBackImageView;
private ImageView mIndicatorImageView;
public MyMapView(Context context) {
super(context);
mBackImageView = new ImageView(context);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
mBackImageView.setImageResource(R.drawable.image1);
mBackImageView.setScaleType(ImageView.ScaleType.FIT_XY);
addView(mBackImageView, params);
mIndicatorImageView = new ImageView(context);
RelativeLayout.LayoutParams indParams = new RelativeLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
mIndicatorImageView.setImageResource(R.drawable.image2);
addView(mIndicatorImageView, indParams);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
centerIndicatorPosition();
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
centerIndicatorPosition();
}
// @eros: this's the part you want. this method just centers the indicator view
// but if you have the relative position like you say, use it for the margins
private void centerIndicatorPosition() {
int xPos = (getMeasuredWidth() - mIndicatorImageView.getMeasuredWidth()) / 2;
int yPos = (getMeasuredHeight() - mIndicatorImageView.getMeasuredHeight()) / 2;
((RelativeLayout.LayoutParams)mIndicatorImageView.getLayoutParams())
.setMargins(xPos, yPos, 0, 0);
}
}