2016-06-08 76 views
4

您好我想使熱點的形象,但問題是,當屏幕尺寸變化的熱點位置也得到了改變像映射在Android

我已經做以下的事情到現在爲止

貝婁是我的佈局文件

<?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

您應該瞭解有關響應式佈局的原因,因爲在這種情況下,您無法獲得準確位置的熱點是因爲在切換手機時父母大小會發生變化。 –

+0

究竟你想要那個熱點?在imageview中間? –

+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; 

現在左邊緣和頂部邊緣將根據屏幕大小進行更新。

希望這將有助於你:)

+0

你是什麼意思是標準寬度和標準高度 –

+0

標準的意思,屏幕774.6667,413.25工作正常。假設它對1280x800工作正常。那麼1280是標準高度,800是標準寬度。 – Neo

+0

@VishalMokal你的問題解決了嗎? – Neo

0

您可以做的是使Imageview Wrap內容,然後在Java中獲取ImageView的位置,並將其添加到邊緣並將其設置爲熱點查看

+0

我試過了,但不起作用 –

0

更改X,Y Hotspot作爲圖像上的%位置 - 例如圖像寬度爲100px,接入點X爲10,因此它的X = 0.1。 接下來,獲取圖像視圖的圖像矩陣浮動陣列:

float[] values = new float[9]; 
btn.getImageMatrix().getValues(values) 

你已經離開圖像位置的第二個指標,並在5日 - 頂部圖像位置。然後你就可以得到正確的熱點位置:

float hotspotX = btn.getWidth()*X + values[2]; 
float hotspotY = btn.getHeight()*Y + values[5]; 
0

在下面的代碼給出的屏幕的hieght和寬度,

Display display = getWindowManager().getDefaultDisplay(); 
Point size = new Point(); 
display.getSize(size); 
x = size.x; y = size.y; 

(X/2,Y/2)這給出了在中心位置屏幕。

U可以設置在Y的方面LEFTMARGIN和rightmargin喜歡:

bp.leftMargin = 10*y/100; 
bp.rightMargin = 10*y/100; 

此設置影像的左,右頁邊距10%的路程。

希望這會有所幫助! U可以根據您的要求進行更改。