2015-03-09 11 views
3

Я хочу сделать относительный макет в форме круга. Я не хочу использовать холст, потому что я не могу обрабатывать интерактивные события в canvas. Мне нужно каждое событие, например, щелчок мышью и т. Д. для выполнения только внутри этого круга. При нажатии за пределами круга не должно выполняться событие макета.
enter image description hereОтносительная компоновка в виде круга

Я следующий код, circle.xml

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

    <solid 
     android:color="@android:color/white"/> 

    <size 
     android:width="10dp" 
     android:height="10dp"/> 
</shape> 

, img.xml

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

    <item android:drawable="@drawable/circle"/> 

</layer-list> 

, расположение

<RelativeLayout 
     android:id="@+id/test_layout" 
     android:layout_width="700px" 
     android:layout_height="700px" 
     android:background="@drawable/img" /> 

Но этот код устанавливает круг на фон relat ive, который находится в форме прямоугольника. Независимо от того, какое событие я добавляю к относительной компоновке, выполняйте за пределами круга. Я хочу, чтобы весь макет был кругом. Как я могу это сделать?

+0

Создайте форму в выпадающей папке и примените ее как фон. –

+0

Это может помочь http://www.gadgetsaint.com/tips/dynamic-square-rectangular-layouts-android/#.WRRjMvl96Hs – ASP

ответ

2

Создать xml файл и добавьте в drawable папку

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="oval" > 
<solid android:color="#65BF59"/> <!-- this one is ths color of the Rounded Button --> 
    <corners 
    android:bottomRightRadius="100dp" 
    android:bottomLeftRadius="100dp" 
    android:topLeftRadius="100dp" 
    android:topRightRadius="100dp"/> 
</shape> 

Используйте этот файл на фоне макета.

1

Каждый макет представляет собой прямоугольник. вы не можете это изменить. Вот как работает интерфейс Android UI.

Но вы можете нарисовать круг (то, как вы это делаете), и самостоятельно обрабатывать события касания.

Для этого нужно создать собственный относительный макет (или любой другой тип макета вам нужно):

public class CircleRelativeLayout extends RelativeLayout { 

и @Override методов касания:

public boolean onInterceptTouchEvent (MotionEvent event) { 
    if(isInsideCircle(event)){ 
     return super.onInterceptTouchEvent(event); 
    } else { 
     return false; 
    } 
} 

public boolean onTouchEvent (MotionEvent event) { 
    if(isInsideCircle(event)){ 
     return super.onTouchEvent(event); 
    } else { 
     return false; 
    } 
} 

, то это просто вопрос создания метода private boolean isInsiderCircle(MotionEvent event) с использованием геометрии.

Смежные вопросы