Android

时间:2016-06-08 05:45:10

标签: android image layout

您好我正在尝试在图片上制作热点,但问题是当屏幕尺寸变化时热点位置也发生了变化

  

我已经完成了以下的事情

     

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)坐标与屏幕尺寸无关

4 个答案:

答案 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%。

希望这有帮助!你可以根据你的要求做出改变。