2015-10-21 17 views
17

Tôi đang cố gắng tạo một danh sách ngang với một số RecyclerView, khi tôi đặt trọng tâm vào một mục, hãy tăng kích thước của mục này. Tôi muốn làm cho hiệu ứng này:Làm thế nào để tăng kích thước của một mục tập trung hiện tại trên RecyclerView?

Increased item effect

Bạn có bất cứ ý tưởng để thực hiện điều này?

+0

Tôi làm chính xác như vậy. nhưng không ảnh hưởng đến 'RecyclerList' của tôi. Tôi có một cái nhìn hình ảnh trên người giữ quan điểm của tôi và tôi muốn lớn hơn khi tập trung. Giúp tôi! –

+0

Xin chào @SadeqShajary, có thể bạn nên áp dụng focusChangeListener vào chế độ xem gốc thay vì chính imageView. Điều này đã được phát triển và thử nghiệm trên Android TV, sử dụng điều khiển từ xa. – Skycorsarius

+3

Vui lòng không chỉnh sửa giải pháp thành câu hỏi - bạn nên đăng giải pháp đó làm câu trả lời để nhất quán với định dạng Hỏi và Đáp của Stack Overflow. – EJoshuaS

Trả lời

0

Nhờ dextor câu trả lời, tôi có thể tìm ra câu trả lời này.

Tôi đã sử dụng FocusChangeListener và thêm trạng thái hoạt hình để thay đổi kích thước của quan điểm:

static class ViewHolder extends RecyclerView.ViewHolder { 

public ViewHolder(final View root) { 
    // bind views 
    // ... 

    // bind focus listener 
    root.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      if (hasFocus) { 
       // run scale animation and make it bigger 
       Animation anim = AnimationUtils.loadAnimation(context, R.anim.scale_in_tv); 
       root.startAnimation(anim); 
       anim.setFillAfter(true); 
      } else { 
       // run scale animation and make it smaller 
       Animation anim = AnimationUtils.loadAnimation(context, R.anim.scale_out_tv); 
       root.startAnimation(anim); 
       anim.setFillAfter(true); 
      } 
     } 
    }); 
} 

Và mã cho anims:

scale_in_tv:

<scale xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="300" 
    android:fromXScale="100%" 
    android:fromYScale="100%" 
    android:toXScale="110%" 
    android:toYScale="110%" 
    android:pivotX="50%" 
    android:pivotY="50%"> 
</scale> 

scale_out_tv :

<scale xmlns:android="http://schemas.android.com/apk/res/android" 
    android:duration="100" 
    android:fromXScale="110%" 
    android:fromYScale="110%" 
    android:toXScale="100%" 
    android:toYScale="100%" 
    android:pivotX="50%" 
    android:pivotY="50%"> 
</scale> 
+0

Điều này khác với giải pháp của tôi như thế nào và tại sao câu trả lời được chấp nhận (tôi) bị xóa sau gần một năm? – Sebastiano

9

Tôi đang tưởng tượng một cái gì đó như thế này:

  1. Tạo RV ngang
  2. Khi ràng buộc ViewHolder, đính kèm một FocusChangeListener đến xem gốc của mặt hàng đó
  3. Khi đạt mục tập trung, quy mô nó để làm cho nó lớn hơn một chút; khi tiêu điểm bị mất, hãy hoàn nguyên hoạt ảnh.

static class ViewHolder extends RecyclerView.ViewHolder { 

    public ViewHolder(View root) { 
    // bind views 
    // ... 

    // bind focus listener 
    root.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      if (hasFocus) { 
      // run scale animation and make it bigger 
      } else { 
      // run scale animation and make it smaller 
      } 
     } 
    }); 
    } 
} 
+1

Giải pháp này chỉ hoạt động cho Android TV, nhưng không dành cho Thiết bị di động ... :-( – Pawan

+1

@Pawan: bạn đã thử bằng cách cho android: focusable = "true" android: focusableInTouchMode = "true" vào chế độ xem gốc của bạn trong xml –

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