2015-05-29 6 views
0

У меня есть изображениеView, и когда мне нужно позволить пользователю нажать только в определенном месте (пробел), как показано на изображении ниже, любое предложение?Нажмите 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

Что я сделал, я использовал два изображения: один для Показать изображение и Secound это только некоторые части этого где вы хотите нажать

Пожалуйста, обратите внимание Моего Secound Изображение моего прозрачное изображения. Поэтому используйте 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 и создать shape.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.

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 с помощью paddings, который вам нужен, и подписаться на его событие 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; 
    } 
}; 
Смежные вопросы