2011-09-26 49 views
15

Có thể che giấu chế độ xem không? Ví dụ: nếu tôi có thiết kế yêu cầu Chế độ xem danh sách hiển thị trong hình mở đầu hình bầu dục. Có cách nào để tạo mặt nạ cho chế độ xem không? Nó được gọi là cái gì khác? Bởi vì tất cả các tài liệu tham khảo tôi tìm thấy để che giấu trong tài liệu android đang nói về mặt nạ một đối tượng canvas hoặc drawable. Nhưng tôi không nghĩ rằng làm cho một drawable của một đối tượng tương tác như một danh sách Xem sẽ là một cách tiếp cận tốt. Đây có phải chỉ là một hạn chế để giải quyết ngay bây giờ không?Có thể che giấu Chế độ xem trong Android không?

Trả lời

30

Vâng, đó là - bạn phải ghi đè lên các phương pháp vẽ của tầm nhìn của bạn - tức là:

...... 
final Path path = new Path(); 
path.addRoundRect(new RectF(0,0,getWidth(),getHeight()),10,10,Direction.CW); 
...... 
@Override 
protected void dispatchDraw(Canvas canvas){ 
    canvas.clipPath(path); 
    super.dispatchDraw(canvas); 
} 

này sẽ thu hút cái nhìn của bạn chỉ trong ranh giới được thiết lập bởi con đường.

+1

Bạn cũng có thể tạo ra bất cứ điều gì "mặt nạ" hiệu ứng mà bạn muốn và chỉ cần đặt nó vào Xem riêng của mình và đặt nó ontop/ở phía trước của quan điểm trong câu hỏi . Nếu bạn chỉ cần hiệu ứng này cho 1 chế độ xem cụ thể, điều này sẽ giúp bạn tiết kiệm được sự cố khi tạo chế độ xem của riêng bạn và chỉnh sửa phương thức vẽ. – FoamyGuy

+0

Điều đó sẽ sai, Tim. Bạn sẽ làm chậm ứng dụng của mình hơn bằng cách tạo phân cấp chế độ xem hoàn toàn không cần thiết trên nền tảng di động, nơi hiệu suất là rất quan trọng. – asenovm

+0

Tôi đồng ý rằng nó sẽ dẫn đến hiệu suất tồi tệ hơn. Tôi cho rằng nếu anh ta áp dụng nó cho 1 lượt xem trong 1 hoạt động thì sự khác biệt về hiệu suất sẽ không đáng kể đối với mắt người trên các thiết bị ở ngoài đó. Và làm điều đó với quan điểm riêng biệt có thể dường như ít khó khăn đối với một số người hơn là cố gắng tạo ra quan điểm riêng của họ để họ có thể ghi đè lên các phương pháp vẽ. Tôi biết làm những việc như thế sẽ trở nên tầm thường sau khi bạn nhận được một số ít dưới thắt lưng của bạn. Nhưng nếu bạn chưa bao giờ làm điều đó trước đây, với tôi có vẻ như nó có thể hơi khó khăn. – FoamyGuy

10

Có, bạn thậm chí có thể che giấu bố cục hoàn chỉnh. Shameless selfplug

<com.christophesmet.android.views.maskableframelayout.MaskableFrameLayout 
android:id="@+id/frm_mask_animated" 
android:layout_width="100dp" 
app:porterduffxfermode="DST_IN" 
app:mask="@drawable/animation_mask" 
android:layout_height="100dp"> 

<ImageView android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:scaleType="centerCrop" 
      android:src="@drawable/unicorn"/> 

Bạn có thể tìm thấy nó here

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