2015-05-29 125 views
0

我有一個imageView,當我需要讓用戶只點擊特定位置(白色空間)時,如下圖所示,任何建議?單擊特定位置上的ImageView

enter image description here

這裏是我的XML

<RelativeLayout 
      android:id="@+id/lockRelativeLayout" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 
      android:layout_marginStart="5dp" 
      > 
      <ImageView 
       android:id="@+id/imageView" 
       android:layout_width="100dp" 
       android:layout_height="100dp" 
       android:background="@drawable/image" /> 
     </RelativeLayout> 

這裏是代碼

private View.OnTouchListener imageViewOnClickListener = new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View view, MotionEvent event) { 
      int x = (int)event.getX(); 
      int y = (int)event.getY(); 
      if (event.getAction() == MotionEvent.ACTION_DOWN){ 
       //here i want if he clicked on specific location to go to another activity 
Intent intent = new Intent(context, ViewerActivity.class); 
      context.startActivity(intent); 
      } 
      return true; 
     } 
    }; 

我不知道我是否應該使用的onClick或onTouchClick!

+0

你想要什麼exaclty?你有什麼工作? –

+0

顯示你的xml佈局 –

+0

所以你需要的是點擊圖像,還是隻是其中的一小部分? –

回答

2

我做什麼是我用了兩個圖像一爲顯示您的圖片和謝勝利,是顯示僅是要點擊

請注意我的謝勝利,圖片是我的透明圖像的一些部分。因此,使用one1作爲透明圖像。並使用其Click事件。

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:gravity="center" 
android:orientation="vertical" > 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <ImageView 
     android:id="@+id/imageView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:src="@drawable/ic_launcher" /> 
</LinearLayout> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@xml/shape" 
    android:gravity="center" > 

    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/one1" /> 
</LinearLayout> 

現在創建XML,並創建該給的LinearLayout

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle" > 

<corners android:radius="20dip" /> 

<stroke 
    android:width="100dip" 
    android:color="#A0ffffff" /> 

+0

沒有先生的圖像是固定的,我不能把保證金,它的形狀將是不同的!我需要它像在圖像中顯示的問題 –

+0

您好,我更新了我的代碼。它會幫助你 –

+0

我投它,因爲它是有用的,但我發現另一種解決方案比添加其他的東西,我的當前代碼更好,謝謝你很多我想要的 –

3

您可以實現的OnTouchListener shape.xml文件。

anImageView.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if(event.getAction() == MotionEvent.ACTION_DOWN){ 
       //Check between +- 10px jsu tto have some are to hit 
       int centerX = (v.getWidth() /2); 
       if(event.getX() > centerX - 10) 
        && event.getX() < centerX + 10)){ 
        //Do your magic 
       } 
      } 
      return true; 
     } 
    }); 

事件包含事件的座標。 然後,您可以將其與您設置的邊界進行比較,或者從圖像中獲取正確的像素,並檢查它是否爲白色。

+0

,如何多少它是從左右!並只在中間點擊?並且該圖像僅用於解釋目的而不是真實圖像 –

+0

它是否適用於編輯? – Flaxie

+0

我發現了一個解決方案,但我會嘗試你的,因爲我認爲它比設置固定寬度更好@Flaxie –

2

我會建議將另一個透明控件放在ImageView頂部的相對佈局中,並使用您需要的填充,並訂閱其onClick事件。這樣你可以確保只有正確的區域被點擊。

1

我發現我自己的解決方案:感謝所有的答覆:

private View.OnTouchListener imageViewOnClickListener = new View.OnTouchListener() { 

    @Override 
    public boolean onTouch(View view, MotionEvent event) { 
     int x = (int) event.getX(); 

     if (173 <= x && x <= 671) { 
      Intent intent = new Intent(context, NextActivity.class); 
      context.startActivity(intent); 
     } 
     return true; 
    } 
};