Android 모방 qq 그룹 관리 제3자 라 이브 러 리

7058 단어 Androidqq패 킷
본 고의 실례 는 여러분 에 게 안 드 로 이 드 모방 qq 그룹 관리의 제3자 라 이브 러 리 를 공 유 했 습 니 다.여러분 에 게 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
다음은 효과 부터 볼 게 요. 

우 리 는 전개 와 접 기 를 누 르 면 그룹 을 나 누 는 기능 이 라 이브 러 리 에 이미 봉 인 된 것 입 니 다.항목 에 만 들 어 갈 수 있 고 직접 사용 할 수 있 습 니 다.매우 편리 합 니 다.
아래 핵심 코드 바로 올 리 기
먼저 그룹 을 나 누 는 대상 을 정의 합 니 다.위의 빨간색 글꼴 에 해당 하 는 대상 과 각 아 이 템 을 나 누 는 대상 을 정의 합 니 다.
그룹 을 만 든 ViewHolder 는 제3자 라 이브 러 리 를 계승 하 는 ParentViewHolder 입 니 다.코드 는 다음 과 같 습 니 다.(부모 클래스 에 인삼 구조 가 없 기 때문에 부모 클래스 의 인삼 구 조 를 실현 해 야 합 니 다.들 어 오 는 매개 변 수 는 여러분 도 잘 알 고 있 을 것 입 니 다)

/**
 *    ViewHolder
 */
public class TeamViewHolder extends ParentViewHolder {
 /**
  * Default constructor.
  *
  * @param itemView The {@link View} being hosted in this ViewHolder
  */
 public TeamViewHolder(@NonNull View itemView) {
  super(itemView);
 }
}
각 그룹의 ViewHolder 가 있 는 이상 각 그룹의 체면 아 이 템 의 ViewHolder 가 있 습 니 다.다음은 이 ViewHolder 를 만 듭 니 다.실현 방식 은 위 와 같 고 이름 도 명확 합 니 다.하 나 는 parent 이 고 하 나 는 child 입 니 다.

public class PlayerViewHolder extends ChildViewHolder {
 private final TextView mIngredientTextView;

 /**
  * Default constructor.
  *
  * @param itemView The {@link View} being hosted in this ViewHolder
  */
 public PlayerViewHolder(@NonNull View itemView) {
  super(itemView);
  mIngredientTextView = ((TextView) itemView.findViewById(R.id.ingredient_textview));
 }
}
View Holder 를 만 든 후에 기능 이 절반 이 완성 되 었 다 고 할 수 있 습 니 다.나머지 유형 은 모두 가 낯 설 지 않 을 것 입 니 다.바로 adapter 입 니 다.목록 이 있 는 View 는 adapter 가 데 이 터 를 연결 해 야 합 니 다.아래 에 코드 를 직접 올 리 는 것 도 제3자 라 이브 러 리 를 계승 하 는 adapter 입 니 다.그래서 우 리 는 어떤 방법 을 쓰 려 고 하지 않 고 실현 할 방법 만 실현 하면 끝 납 니 다.

public class TeamAdapter extends ExpandableRecyclerAdapter<Team, Player, TeamViewHolder, PlayerViewHolder> {
 private final LayoutInflater mInflater;

 /**
  * Primary constructor. Sets up {@link #mParentList} and {@link #mFlatItemList}.
  * <p>
  * Any changes to {@link #mParentList} should be made on the original instance, and notified via
  * {@link #notifyParentInserted(int)}
  * {@link #notifyParentRemoved(int)}
  * {@link #notifyParentChanged(int)}
  * {@link #notifyParentRangeInserted(int, int)}
  * {@link #notifyChildInserted(int, int)}
  * {@link #notifyChildRemoved(int, int)}
  * {@link #notifyChildChanged(int, int)}
  * methods and not the notify methods of RecyclerView.Adapter.
  *
  * @param parentList List of all parents to be displayed in the RecyclerView that this
  *     adapter is linked to
  */
 public TeamAdapter(Context context, @NonNull List<Team> parentList) {
  super(parentList);
  mInflater = LayoutInflater.from(context);
 }

 @NonNull
 @Override
 public TeamViewHolder onCreateParentViewHolder(@NonNull ViewGroup parentViewGroup, int viewType) {
  View view = mInflater.inflate(R.layout.team_view, parentViewGroup, false);
  return new TeamViewHolder(view);
 }

 @NonNull
 @Override
 public PlayerViewHolder onCreateChildViewHolder(@NonNull ViewGroup childViewGroup, int viewType) {
  View view = mInflater.inflate(R.layout.player_view, childViewGroup, false);
  return new PlayerViewHolder(view);
 }

 @Override
 public void onBindParentViewHolder(@NonNull TeamViewHolder parentViewHolder, int parentPosition, @NonNull Team parent) {
  parentViewHolder.bind(parent);
 }

 @Override
 public void onBindChildViewHolder(@NonNull PlayerViewHolder childViewHolder, int parentPosition, int childPosition, @NonNull Player child) {
  childViewHolder.bind(child);
 }
}
여러분 들 은 상속 을 볼 때 4 개의 범 형 류 가 들 어 가 는 것 을 보 았 습 니 다.순간 에 가 려 진 것 이 아 닙 니까?마음 속으로 이것 이 무엇 인지 생각 했 을 것 입 니 다.사실 세심 한 사람들 은 각 그룹의 대상,하위 item 대상,그리고 그룹 과 하위 item 의 View Holder 라 는 것 을 알 게 되 었 습 니 다.또 다른 네 가지 방법 이 있 으 면 더 잘 이해 할 수 있 고,명 의 를 보 는 것 이 라 고 할 수 있 으 며,더 이상 설명 하지 않 는 다.
활용 단어 참조
위 에 사 용 된 adapter 가 RecyclerView 의 adapter 라 는 것 을 의식 하 셨 는 지 모 르 겠 습 니 다.목록 을 표시 하 는 view 도 recyclerview 를 사용 합 니 다.recyclerview 의 용법 도 어렵 지 않 습 니 다.몇 가지 방법 으로 초기 화 한 다음 에 adapter 를 설정 하면 데이터 바 인 딩 이 완 료 됩 니 다.지금 말 하 는 그룹 디 스 플레이 는 평소 recyclerview 를 호출 하 는 것 과 거의 같 습 니 다.유일한 차이 점 은 데이터 소스 에 대해 일정한 처 리 를 해 야 한 다 는 것 이다.

//     recyclerview         
recyclerView.setLayoutManager(new LinearLayoutManager(this));

//           
List<Player> players1 = new ArrayList<>();
//           
List<Player> players2 = new ArrayList<>();
//           
List<Player> players3 = new ArrayList<>();

//        
List<Team> teams = new ArrayList<>();
//       ,           
Team team = new Team(teamNames[0], players1);
Team team2 = new Team(teamNames[1], players2);
Team team3 = new Team(teamNames[2], players3);
teams.add(team);
teams.add(team2);
teams.add(team3);
// adapter              
TeamAdapter adapter = new TeamAdapter(this, teams);
  recyclerView.setAdapter(adapter);
여기까지 데 이 터 를 표시 할 수 있 습 니 다.효 과 는 위의 그림 과 같 지만 각 그룹 뒤의 화살 표 는 움 직 이지 않 습 니 다.다음은 화살표 에 회전 애니메이션 을 추가 하 는 것 입 니 다.실현 도 매우 간단 하 다.TeamView Holder 에서 부모 류 의 한 방법 을 다시 쓰 면 된다.물론 안의 회전 논 리 는 실제 상황 에 따라 이 루어 진다.

private static final float INITIAL_POSITION = -90F;
private static final float ROTATED_POSITION = 0.0F;
@Override
 public void setExpanded(boolean expanded) {
  super.setExpanded(expanded);
  RotateAnimation ra;
  if (!expanded) {
   //         
   ra = new RotateAnimation(
     ROTATED_POSITION, //       
     INITIAL_POSITION, //       
     RotateAnimation.RELATIVE_TO_SELF, //          
     0.5f,
     Animation.RELATIVE_TO_SELF,
     0.5f);
  } else {
   ra = new RotateAnimation(
     INITIAL_POSITION,
     ROTATED_POSITION,
     Animation.RELATIVE_TO_SELF,
     0.5f,
     Animation.RELATIVE_TO_SELF,
     0.5f);
  }
  ra.setDuration(200);
  ra.setFillAfter(true);
  mArrowExpandImageView.startAnimation(ra);
 }
내 가 여기 서 실현 한 것 은 바로 위의 그림 의 효과 이 고 사실은 회전 애니메이션 의 실현 이다.설명 이 필요 한 것 은 setExpanded()라 는 방법 이 내부 에서 호출 되 었 습 니 다.들 어 오 는 매개 변 수 는 true 일 때 이 그룹 이 열 렸 다 는 것 을 설명 합 니 다.false 는 이 그룹 이 열 리 지 않 았 다 는 것 을 의미 합 니 다.이 값 에 따라 관련 처 리 를 하면 원 하 는 효 과 를 얻 을 수 있 습 니 다.
총결산
이 제3자 라 이브 러 리 는 매우 편리 하고 논리 도 어렵 지 않 으 며 주요 한 용법 도 소개 했다 고 할 수 있다.예 를 들 어 코드 를 이해 하면 쉽게 가 져 와 서 사용 할 수 있 고 이런 우수한 코드 를 쓴 제3자 라 이브 러 리 의 작가 님 의 공유 에 감 사 드 립 니 다.우수한 소스 코드 를 발굴 해서 모두 꺼 내 서 공유 하고 토론 하 시기 바 랍 니 다!
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기