2016-04-12 17 views
7

Tôi muốn tạo chế độ xem với người nghe hoạt động giống như một thùng chứa hoặc túi hàng tạp hóa. Bất kỳ hình ảnh hoặc văn bản được kéo vào nó, được thu thập và lưu vào cơ sở dữ liệu cục bộ. Hay đúng hơn là tên hoặc chuỗi hình ảnh được lưu. Tôi đã tạo chế độ xem tùy chỉnh trước khi hiển thị hàng dữ liệu tùy chỉnh nhưng tôi không chắc chắn cách tạo loại chế độ xem "túi tạp hóa". Tôi đã tìm kiếm Google để tạo chế độ xem vùng chứa tùy chỉnh với người nghe nhưng không thể tìm thấy bất kỳ điều gì liên quan đến nội dung tôi đang tìm kiếm. Tôi không yêu cầu bất cứ ai làm điều đó cho tôi, chỉ cần cho tôi một số lời khuyên hoặc đẩy đúng hướng.Tôi làm cách nào để tạo chế độ xem vùng chứa tùy chỉnh trong Android?

Chỉnh sửa Chỉ cần làm rõ thêm một chút. Tôi đã biết cách kéo và thả chế độ xem. Vấn đề với điều đó là bạn có thể thả bất cứ đâu. Những gì tôi muốn là một cái nhìn rằng khi một cái gì đó được giảm trong giới hạn của nó, nó nhận được chuỗi hoặc thẻ của lượt xem. Bất kể loại xem có thể là gì. Bằng cách nào đó, chế độ xem tùy chỉnh này phải biết loại chế độ xem đã bị loại bỏ trong giới hạn của nó và loại bỏ chế độ xem đó khi thả.

+0

_Trying để hiểu yêu cầu của bạn as_ Divide màn hình trong 2 phần: (LHS & RHS) LHS có một số mặt hàng (Giống như trứng, bánh vv ...) RHS có BAG (ví dụ túi mua sắm) Khi bạn kéo và thả trứng từ LHS đến RHS (tức là LHS đến túi mua sắm), vật phẩm được thêm vào hóa đơn (ví dụ: Local DB) Chính xác? ? – Pawan

+0

Bạn đang bao hàm các cấp API? nghĩa là kỳ vọng của bạn đối với MinSDKLevel là bao nhiêu? – Pawan

+0

Có vẻ như bạn muốn đọc điều này và đến đây một lần nữa với sự cố của bạn khi thực hiện: http://developer.android.com/intl/es/guide/topics/ui/drag-drop.html – Nanoc

Trả lời

1
<view class="at.calista.quatscha.views.SwipebarLayout" 
     android:id="@+id/sbl" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 

     <!-- Top View --> 
     <Button android:text="Top" android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> 

     <!-- Bottom View --> 
     <Button android:text="Bottom" android:id="@+id/Button02" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> 

+0

cũng tham khảo http://developer.android.com/reference/android/view/ViewGroup.html –

+0

Điều này không trả lời được câu hỏi của tôi. Ví dụ này là dành cho bố cục có thể vuốt giống như một thanh công cụ hoặc bố cục tab. Nó không đưa ra một ví dụ về dạng xem "vùng chứa". Cảm ơn bạn mặc dù. –

1

Bạn sẽ cần một phương pháp mà sẽ xác định xem hai quan điểm chồng chéo lên nhau. Ví dụ, một cái gì đó giống như các phương pháp này có thể làm việc cho khi xem mục tiêu và quan điểm mục kéo là 2 quan điểm khác biệt trong giao diện cùng một container:

private Rect getScreenBounds(View view) 
{ 
    int[] location = new int[2]; 
    view.getLocationOnScreen(location); 

    return new Rect(location[0], location[1], location[0] + view.getWidth(), location[1] + view.getHeight()); 
} 

private boolean doViewsIntersect(View dropTarget, View item) 
{ 
    Rect dropRect = getScreenBounds(dropTarget); 
    Rect itemRect = getScreenBounds(item); 

    return Rect.intersects(dropRect, itemRect); 
} 

Tuy nhiên, nếu quan điểm bị kéo những quan điểm trẻ em trên một container, và vùng chứa đó có vùng nhấn đặc biệt nơi bạn muốn thực hiện logic thả, sau đó bạn chỉ có thể sử dụng vùng thử nghiệm đó là Rect cho thử nghiệm giao nhau.

Để lưu thông tin về View, bạn có một vài lựa chọn:

  • Bạn có thể sử dụng view.setTag(key, object)view.getTag(key) để lưu trữ bất kỳ thông tin bạn muốn trên mỗi mục.
  • Nếu bạn đang sử dụng lớp tùy chỉnh cho các mục, bạn chỉ có thể thêm phương thức để lấy dữ liệu từ lớp chế độ xem.
  • Nếu bạn đang sử dụng nhiều lớp khác nhau cho các mục, bạn có thể tạo một giao diện và triển khai giao diện đó trên mỗi lớp chế độ xem có thể kéo.

Trên bản phát hành của một mục, bạn có thể kiểm tra xem khu vực/điểm cắt có giao nhau không và có làm gì không. lượt xem.

Ví dụ: điều này có thể được kích hoạt qua số onTouchListener khi bạn nhận được sự kiện MotionEvent.ACTION_UP. Dưới đây là một ví dụ về một người biết lắng nghe mà bạn có thể thêm vào từng hạng mục:

item.setOnTouchListener(new View.OnTouchListener() 
{ 
    @Override 
    public boolean onTouch(View v, MotionEvent event) 
    { 
     if (event.getActionMasked() == MotionEvent.ACTION_UP) 
     { 
      if (doViewsIntesect(dropTarget, v)) 
      { 
       Object data = v.getTag(DATA_KEY); 
       //process data 
       ((ViewGroup) v.getParent()).removeView(v); // to remove the item afterwards 
      } 
     } 
     return false; 
    } 
}); 
Các vấn đề liên quan