Android 모방 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자 라 이브 러 리 의 작가 님 의 공유 에 감 사 드 립 니 다.우수한 소스 코드 를 발굴 해서 모두 꺼 내 서 공유 하고 토론 하 시기 바 랍 니 다!
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.