2012-08-24 40 views
21

Giao diện chính của ứng dụng của tôi là chế độ xem nơi người dùng chỉ cần trượt các trang theo chiều ngang để đến các trang khác nhau. Một trong các trang có một bản đồ googleview (dán dưới đây). Vấn đề của tôi là nếu người dùng đang ở trên trang bản đồ và sử dụng cử chỉ trượt ngang, trang sẽ chuyển sang trang tiếp theo thay vì bản đồ di chuyển sang một bên. Như thể người xem đang nhận được cử chỉ trước bản đồ.vấn đề cử chỉ với chế độ xem bản đồ trong trang chế độ xem

Nếu người dùng thông minh và bắt đầu trượt bản đồ theo chiều chéo hoặc dọc, bản đồ bắt đầu di chuyển và sau đó cử chỉ có thể tiếp tục theo chiều ngang. Nhưng tôi thích bản đồ di chuyển thay vì trang trên một cử chỉ trượt ngang đơn giản. Trang luôn có thể được trượt bằng cách sử dụng chế độ xem văn bản.

Có cách nào để tôi có thể thực hiện điều này không?
cảm ơn, Gary

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

<TextView 
    android:id="@+id/tvMAP" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="Map" 
    style="@style/bigtype" /> 


<com.google.android.maps.MapView 
    android:id="@+id/mapview" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:apiKey="mykeygoeshere" 
    android:clickable="true" /> 

</LinearLayout> 

Trả lời

45

Tất nhiên có là:

public class CustomViewPager extends ViewPager { 

    public CustomViewPager(Context context) { 
     super(context); 
    } 

    public CustomViewPager(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    protected boolean canScroll(View v, boolean checkV, int dx, int x, int y) { 
     if(v instanceof MapView){ 
      return true; 
     } 
     return super.canScroll(v, checkV, dx, x, y); 
    } 

} 

này sẽ làm cho bản đồ bỏ qua tất cả các slide trong bản đồ và chỉ quan tâm đến các slide/draggs bên ngoài bản đồ. Hy vọng nó giúp. (Tôi làm điều này ngay bây giờ cho một lần xem web với cuộn ngang)

EDIT: Quên đề cập rằng thay vì ViewPager bạn cần sử dụng CustomViewPager trong bố cục yout.

<com.yourpackage.CustomViewPager 
      android:id="@+id/viewpager" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
     /> 
+0

tôi đặt lớp của bạn vào hoạt động chính của tôi java file. Tôi đã thay đổi xml để gọi cho com.deanblakely.CustomViewPager. Có thời gian chạy ClassNotFoundException com.deanblakely.CustomeViewPager. Có điều gì tôi quên làm không? (mới cho android và java). –

+0

Điều này được cho là ở trong một lớp riêng biệt. Bạn cần tạo một tệp mới và đặt mã này. Trong trường hợp này nếu bạn muốn đặt "com.deanblakely.CustomViewPager" thì hãy tạo tệp "CustomViewPager" trong thư mục "deanblakely" bên trong thư mục "com". –

+0

Jorge. Vâng, điều đó đã làm việc một khi tôi đưa lớp vào một tập tin riêng biệt. Cảm ơn. –

11

Nếu sử dụng Google Maps V2, sử dụng

scrollingView.getClass() getPackage() getName() startsWith ("bản đồ"). trong canScroll phương pháp:...

@Override 
protected boolean canScroll(View scrollingView, boolean checkV, int dx, int x, int y) { 
    if (scrollingView.getClass().getPackage().getName().startsWith("maps.")) { 
     return true; 
    } 
    return super.canScroll(scrollingView, checkV, dx, x, y); 
} 

becase scrollingViewmaps.jb khi sử dụng bản đồ v2.

Cũng trong mã của tôi, các lớp này được sử dụng:

import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.SupportMapFragment; 
+0

scrollingView.getClass() là null mỗi lần cho tôi vì vậy lỗi này. – Justin

+1

có thể 'scrollingView' là' null' hoặc bạn sử dụng lớp 'ScrollingView' ẩn danh? – ViliusK

+0

Tài liệu trên 'Object.getClass()' không nói gì về các trường hợp khi 'getClass' trả về' null'. – ViliusK

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