Как нарисовать границу вокруг карты - PullRequest
4 голосов
/ 04 июля 2011

Я пытаюсь нарисовать поле вокруг своего mapView при нажатии кнопки.

Так вот, что я пытался, и это не работает.Представление карты находится в относительном макете.

LayoutInflater inflater = getLayoutInflater();

LinearLayout mView = (LinearLayout) inflater.inflate(
                        R.layout.map_view_create_ps, mapView, false);

GeoPoint viewLoc = mapView.getMapCenter();
MapView.LayoutParams params = new MapView.LayoutParams(
                        LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT,
                        viewLoc,

MapView.LayoutParams.BOTTOM_CENTER);
                mView.setLayoutParams(params);
                mapView.addView(mView);
                mView.setVisibility(View.VISIBLE);

Вышеуказанное вызывается при нажатии кнопки

мой create_ps_layout как таковой

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:background="@android:color/transparent">
<LinearLayout android:layout_width="fill_parent"
    android:id="@+id/linearLayout1" android:orientation="vertical"
    android:layout_height="fill_parent"
    android:background="@drawable/rounded_boarder"></LinearLayout>

 </LinearLayout>

И фон для рисованияэто как

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" android:padding="10dp">
<solid android:color="@color/translucent_black" />
<corners android:bottomRightRadius="30dp"
    android:bottomLeftRadius="30dp" android:topLeftRadius="30dp"
    android:topRightRadius="30dp" />
    <stroke android:width="2dip" android:color="#FFB600"/>
</shape>

Это не работает, но не могли бы вы, ребята, указать мне правильное направление, как нарисовать границу вокруг вида карты, когда кнопка выбрана?

Ответы [ 4 ]

10 голосов
/ 27 февраля 2012

помещает ваш просмотр карты в один RelativeLayout и устанавливает свойство заполнения RelativeLayout следующим образом:

      <RelativeLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:orientation="vertical" android:layout_weight="1"
            android:background="#444" android:padding="2dp">

            <com.google.android.maps.MapView
                android:id="@+id/mapView"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:apiKey="YOUR-MAP-KEY"
                android:clickable="true"/>
        </RelativeLayout>
1 голос
/ 22 июля 2013

Создайте простой нарисованный прямоугольник обводки (форма xml) и переключите его на виде карты. Вот образец. Я использую SurfaceView вместо MapView для простоты, он должен работать примерно так же.

Рез / рисуем / red_frame.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <stroke android:color="#ff0000" android:width="3dp"/>
    <padding android:left="3dp" android:top="3dp" android:right="3dp" android:bottom="3dp" />
</shape>

Рез / макет / activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent">

    <CheckBox
            android:id="@+id/frame_switch"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:text="Show frame" />

    <SurfaceView
            style="@android:style/TextAppearance.Large"
            android:id="@+id/target"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@id/frame_switch"/>

</RelativeLayout>

И, наконец, клей Java - MainActivity.java:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final View target = findViewById(R.id.target);
        final CheckBox checkbox = (CheckBox) findViewById(R.id.frame_switch);

        checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
                target.setBackgroundResource(isChecked ? R.drawable.red_frame : 0);
            }
        });
    }
}
1 голос
/ 22 июля 2013

создайте список слоев следующим образом. И добавьте его в качестве фона для вашего относительного макета. Это даст границу с тенью

вот ссылка для более подробной информации http://www.uifuel.com/android-creating-a-drop-shadow-in-xml-layout/

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

     <!-- Drop Shadow Stack -->
     <item>
        <shape>
            <padding android:top="1dp" android:right="1dp" android:bottom="1dp" android:left="1dp" />
            <solid android:color="#00CCCCCC" />
        </shape>
    </item>
     <item>
        <shape>
            <padding android:top="1dp" android:right="1dp" android:bottom="1dp" android:left="1dp" />
            <solid android:color="#10CCCCCC" />
        </shape>
    </item>
     <item>
        <shape>
            <padding android:top="1dp" android:right="1dp" android:bottom="1dp" android:left="1dp" />
            <solid android:color="#20CCCCCC" />
        </shape>
    </item>
     <item>
        <shape>
            <padding android:top="1dp" android:right="1dp" android:bottom="1dp" android:left="1dp" />
            <solid android:color="#30CCCCCC" />
        </shape>
    </item>
    <item>
        <shape>
            <padding android:top="1dp" android:right="1dp" android:bottom="1dp" android:left="1dp" />
            <solid android:color="#50CCCCCC" />
        </shape>
    </item>

    <!-- Background -->
    <item>
    <shape>
            <solid android:color="@color/white" />
        <corners android:radius="3dp" />
    </shape>
    </item>
</layer-list>
1 голос
/ 22 июля 2013

Выполните следующие действия:

1- Создайте файл image_border.xml в чертеже с кодом ниже:

 <?xml version="1.0" encoding="utf-8"?>
 <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
 <item>
    <shape android:shape="rectangle" >
        <gradient
            android:angle="90"
            android:centerColor="#30ffffff"
            android:endColor="#30ffffff"
            android:startColor="#30ffffff" />
    </shape>
</item>
<item
    >
    <shape android:shape="rectangle" >
        <solid android:color="#30ffffff" />
    </shape>
</item>

2 - создайте другой XML-файл image_borderless.xml в чертеже с кодом ниже:

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

3 - в вашей реализации onClick добавьте этот код:

       wp1.setOnClickListener(new OnClickListener() {
   @Override
    public void onClick(View v) {


       //wp1 to add a boarder if selected 
      wp1.setBackgroundDrawable(getResources().getDrawable(
                    R.drawable.image_border));
            wp1.setPadding(8, 8, 8, 8);
      //wp3 to hide the boarder if not selected 
       wp3.setBackgroundDrawable(getResources().getDrawable(
                    R.drawable.image_borderless));

       }
    });
...