您好我正在尝试在图片上制作热点,但问题是当屏幕尺寸变化时热点位置也发生了变化
我已经完成了以下的事情
Bellow是我的布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="myapp.imagemappingdemo.MainActivity">
<FrameLayout
android:layout_width="7000pt"
android:layout_height="5000pt">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/bolt_int"
android:text="Hello World!" />
<RelativeLayout
android:id="@+id/upperView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
>
</RelativeLayout>
</FrameLayout>
我使用以下代码绘制图像。
screenWidth = this.getResources().getDisplayMetrics().widthPixels;
ImageView btn = new ImageView(MainActivity.this);
RelativeLayout.LayoutParams bp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
bp.leftMargin = (int) (774.6667 );
bp.topMargin = (int) (413.25);
btn.setLayoutParams(bp);
btn.setImageResource(R.drawable.ic_stat_name);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "Button Click", Toast.LENGTH_LONG).show();
}
});
upperview.addView(btn, bp);
我试图弄清楚如何通过使用相同的(X,Y)坐标来计算不同屏幕上的确切位置,任何人都可以帮助我这样做,屏幕高度和宽度之间的关系是什么(X,y)坐标与屏幕尺寸无关
答案 0 :(得分:1)
如果以下代码适用于特定屏幕,
bp.leftMargin = (int) (774.6667 );
bp.topMargin = (int) (413.25);
然后根据屏幕高度和宽度更改值,假设它工作正常800 x 480 -
int standardWidth = 480;
int standardHeight = 800;
bp.leftMargin = ((int) (774.6667 ) * dm.widthPixel)/standardWidth;
bp.topMargin = ((int) (413.25) * dm.heightPixel)/standardHeight;
现在将根据屏幕大小更新leftMargin和topMargin。
希望它会对你有所帮助:)。
答案 1 :(得分:0)
你可以做的是制作Imageview Wrap内容,然后在java中首先获取ImageView的位置,然后为其添加边距并将其设置为热点视图
答案 2 :(得分:0)
将热点的X,Y更改为图像上的%位置 - 例如图像宽度为100px,接入点X为10,因此X = 0.1。 接下来,将图像视图的图像矩阵放到浮点数组中:
float[] values = new float[9];
btn.getImageMatrix().getValues(values)
在第二个索引上你已经离开了图像位置,在第五个 - 顶部图像位置。然后你可以得到正确的热点位置:
float hotspotX = btn.getWidth()*X + values[2];
float hotspotY = btn.getHeight()*Y + values[5];
答案 3 :(得分:0)
以下代码给出了屏幕的高度和宽度,
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
x = size.x; y = size.y;
(x / 2,y / 2)这给出了屏幕中的中心位置。
你可以用y来设置leftmargin和rightmargin:
bp.leftMargin = 10*y/100;
bp.rightMargin = 10*y/100;
这会将图像设置为距离左右边距10%。
希望这有帮助!你可以根据你的要求做出改变。