2013-08-28 31 views
7

này là tương đương với Android của this iOS câu hỏi.Android - scrollview thích Foursquare với bản đồ + danh sách

Cố gắng tạo chế độ xem có chứa MapView khoảng 20% ​​màn hình (dưới ActionBar ...) và phần còn lại của màn hình là ScrollView khi cuộn xuống, chồng chéo lên trên MapView và ẩn nó. Nói ngắn gọn như ứng dụng Android của FourSquare. Bất kỳ ý tưởng nào?

+0

[http://stackoverflow.com/questions/25487861/android-maps-markers-bounds-at-the-center-of-top-half-of-map-area](http://stackoverflow.com/question/25487861/android-maps-markers-bounds-at-the-center-of-top-nửa-of-map-area) –

Trả lời

0

Bạn chỉ có thể tuyên bố trong xml của bạn nộp ScrollView nhúng một LinearLayout, nhúng một MapView:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="center_horizontal" 
    android:fillViewport="true" > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical" > 

     <fragment 
      android:id="@+id/map" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      class="com.google.android.gms.maps.MapFragment" /> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" > 

     ...... Your list and other stuff ....... 

     </LinearLayout> 
    </LinearLayout> 
</ScrollView> 

Sau đó, bạn có thể thiết lập kích thước cho mỗi phần tử bằng cách xác định layout_weight thuộc tính

EDIT IvanDanDo, sau cuộc thảo luận của chúng tôi tôi tìm thấy liên kết này có thể làm những gì bạn muốn (không chắc chắn, mặc dù tôi đã không thử nó): Android: Have an arbitrary View slide under another View like the software keyboard does

01.
+0

Đã thử, đã cho 'MapFragment'' layout_weight' = 1 và 'LinearLayout' 'layout_weight' = 3 nhưng tất cả những gì tôi thấy là một bản đồ trên toàn bộ màn hình và một nơi nào đó ở phía dưới, một gợi ý của một danh sách ... và nó cũng không cuộn lên trên bản đồ của tôi. – OferM

+0

Thật kỳ lạ, tôi có khá nhiều mã giống nhau trong ứng dụng của mình. Nếu bạn thay thế bản đồ bằng một 'ImageView' chẳng hạn, nó có cuộn không? Ngoài ra, bạn có thể cố gắng xác định thuộc tính 'weightSum' trong' LinearLayout' đầu tiên thành 4 không? – jbihan

+0

OK, vì vậy thay đổi nó vào một 'ImageView' và tôi nhận ra rằng danh sách của tôi chỉ là không đủ lớn, vì vậy không di chuyển là cần thiết. (câm). Nhưng bây giờ khi tôi cuộn, 'ImageView' /' Map' chỉ cuộn lên, tôi muốn nó dính lên trên cùng vì danh sách cuối cùng sẽ cuộn qua nó như một chồng chéo và ẩn nó hoàn toàn. Làm thế nào để tôi có được hiệu ứng đó? – OferM

4

LAST CẬP NHẬT

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
xmlns:map="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".MainActivity" > 

<fragment 
    android:id="@+id/map_fragment" 
    android:name="com.myapp.MapFragment" 
    android:layout_width="match_parent" 
    android:layout_height="fill_parent" /> 

<fragment 
    android:id="@id/list_fragment" 
    android:name="com.myapp.ListFragment" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" /> 

Sau đó, tôi thêm một tiêu đề vô hình vào danh sách những thứ tương tự như vậy:

@Override 
public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    super.onCreateView(inflater, container, savedInstanceState); 

    View view = inflater.inflate(R.layout.listview, container, false); 
    SwipeListView listView = (SwipeListView) view.findViewById(R.id.venue_list); 

    // An invisible view added as a header to the list and clicking it leads to the mapfragment 
    TextView invisibleView = new TextView(inflater.getContext()); 
    invisibleView.setBackgroundColor(Color.TRANSPARENT); 
    invisibleView.setHeight(300); 
    invisibleView.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      listener.moveToMapFragment(); 
                     } 
    }); 
    listView.addHeaderView(invisibleView); 

Đây là hầu như không lý tưởng, nhưng nó hoạt động. Tôi hy vọng nó sẽ giúp người ..

+1

: nếu bạn có giải pháp tốt hơn, hãy cho tôi biết – user965071

+0

Đây vẫn là giải pháp tốt nhất mà tôi đã tìm được cập nhật. Tôi đã thêm một trình xử lý nhấp chuột vào khung vô hình mở ra bản đồ để vừa với toàn bộ màn hình. – OferM

+0

Bạn có thể chia sẻ bố cục bạn đã tạo không? – user965071

1

Giải pháp đơn giản nhất là thêm một lề nội dung thanh trượt của bạn (tham số thứ hai của SlidingUpPanel) và sau đó loại bỏ các nền mờ dần. Tất cả được thực hiện từ XML.

Các vấn đề liên quan