2016-06-22 19 views
8

Trong Appcompat v24.0.0 nguyên nhân render của bóng/độ cao-AppbarLayout sau khi hoạt động là có thể nhìn thấy. Và một lag có thể dễ dàng được nhìn thấy trong bản vẽ bóng để AppbarLayout.AppBarLayout thay đổi cao độ bị chậm trên appCompat v24.0.0

Và độ trễ này không có trong phiên bản thư viện Appcompat trước đó.

Tested sử dụng cả hai Appcompat v24.0.0Appcompat v23.4.0, bóng vẽ thấy rõ trong các phiên bản mới.

+0

Và câu hỏi của bạn cho cộng đồng StackOverflow là gì? Có lẽ bạn nên gửi báo cáo lỗi cho nhóm ứng dụng. – Budius

Trả lời

18

Đây là lỗi trong Appcompat v24.0.0.

Tài liệu tham khảo: https://code.google.com/p/android/issues/detail?id=213895

Để giảm thiểu sự chậm trễ trong elevation vẽ, thiết lập thời gian để 1ms trong của riêng bạn StateListAnimator và áp dụng nó vào AppbarLayout.

appbar_always_elevated.xml trong phim hoạt hình-v21 thư mục dưới res thư mục.

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

    <item> 
     <objectAnimator android:propertyName="elevation" 
         android:valueTo="8dp" 
         android:valueType="floatType" 
         android:duration="1"/> 
    </item> 

</selector> 

Trong AppbarLayout:

<android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="300dp" 
     android:fitsSystemWindows="true" 
     android:stateListAnimator="@animator/appbar_always_elevated" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

</android.support.design.widget.AppBarLayout> 
+0

@JoaoSousa trả lời cập nhật với đề xuất của bạn. Tôi cũng đã có lỗi tương tự trong khi đặt hoạt hình danh sách nhà nước, vì vậy tôi đặt trong "animator-v21" và làm việc như một sự quyến rũ loại bỏ lỗi đó. –

+0

@Vipul Asri Vì vậy, nếu đúng thư mục để đặt hoạt hình danh sách nhà nước là "anim-v21" tại sao nó hiển thị một lỗi? Tôi nên đặt nó ở đâu? –

+0

@ItielMaimon Nếu lỗi hiển thị của nó, nó sẽ vẫn hoạt động tốt trong thời gian chạy. Nhưng nếu bạn muốn loại bỏ lỗi này, chỉ cần cấu trúc lại 'anim-v21' thành' animator-v21'. Vì thẻ chọn không thể nhận dạng được trong 'anim-v21' như bây giờ. –

10

Chris Banes nói here:

Các StateListAnimator sở hữu tất cả xử lý cao bây giờ. Nếu bạn muốn tự mình làm, hãy đặt một StateListAnimator rỗng và gọi setElevation() như bạn muốn.

Vì vậy, nếu bạn AppBarLayoutkhông collapsible bạn có thể sử dụng này:

<android.support.design.widget.AppBarLayout 
    android:stateListAnimator="@null" 
    android:elevation="@dimen/design_appbar_elevation"> 
+0

Đây phải là câu trả lời được chấp nhận. Nó làm cho thiết kế 24.0.0 hoạt động giống như phiên bản cũ của nó. –

+0

@ MarcelWesołowski Chỉ khi bạn không sử dụng CollapsibleToolbarLayout. –

+0

@EugenPechanec Tôi đang sử dụng 'CollapsibleToolbarLayout' và nó hoạt động tốt. Điều này nên được chấp nhận câu trả lời. – Sandak

0

@Vipul Asri ban cho chúng ta một câu trả lời tốt, nhưng appbar_always_elevated.xml nên vào animator- v11 thay vì animator-v21 thư mục. Bố cục có AppbarLayout là phải nằm trong thư mục v21.

Tóm lại, cấu trúc này là như thế này:

-res 
    -animator-v11 
     -appbar_always_elevated.xml 
    -layout 
     -a_layout_wich_has_the_appbarlayout.xml 
    -layout-v21 
     -a_layout_wich_has_the_appbarlayout.xml 

Lưu ý rằng có hai a_layout_wich_has_the_appbarlayout.xml tệp (AppbarLayout trong v21 thư mục có thuộc tính android: stateListAnimator và trong một không v21 thư mục không có thuộc tính này).

Hãy xem:

Trong một v21 thư mục không bố trí:

<android.support.design.widget.AppBarLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

Và, trong v21 thư mục bố trí:

<android.support.design.widget.AppBarLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:stateListAnimator="@animator/appbar_always_elevated"> 

EDIT

Tò mò, nếu bạn đang sử dụng AppbarLayout với một TabLayout, bóng được rút ra ngay lập tức, nhưng lưu ý rằng nếu bạn đang sử dụng với android: tài sản stateListAnimator trường hợp này, xem bóng là một chút khác nhau.

7

Tôi đoán đó không phải là lỗi, một tính năng.

Thời lượng hoạt ảnh độ cao của AppBarLayout được kiểm soát bởi R.integer.app_bar_elevation_anim_duration theo mặc định là 150.

Để loại bỏ các hình ảnh động, chỉ cần làm như sau và đó là nó:

<integer name="app_bar_elevation_anim_duration" tools:override="true">0</integer>

+0

Đồng ý, nếu đó là lỗi, họ nên khắc phục điều này khi phiên bản mới hơn của bản phát hành lib appcompat, tôi đang sử dụng 25.1.1 và vẫn gặp sự cố chậm. lol – BennyKok

+0

Điều này chắc chắn nên được chấp nhận như là một câu trả lời đúng – daxh

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