![](/img/trans.png)
[英]How to remove fading animation in vertical ViewPager in Android
[英]Android ViewPager remove item with animation
我有viewpager布局作為page.I嘗試刪除deleteBtn點擊動畫的項目。 如果頁面沒有滾動(只是加載了viewpager的活動),它幾乎可以工作。 如果頁面被更改,則動畫不會出現,但項目會像往常一樣刪除。 請幫我修復刪除時的動畫外觀。
視圖尋呼機適配器代碼
@Override
public Object instantiateItem(ViewGroup collection, int position) {
LayoutInflater inflater = LayoutInflater.from(context);
ViewGroup layout = (ViewGroup) inflater.inflate(R.layout.item_home_pager, collection, false);
ImageView deleteBtn = (ImageView) layout.findViewById(R.id.like_btn);
deleteBtn.setOnClickListener(v -> {
Animation animation = AnimationUtils.loadAnimation(context, R.anim.slide_to_top);
layout.startAnimation(animation);
removeItem(position);
});
collection.addView(layout);
return layout;
}
public void removeItem(int position) {
personModels.remove(position);
notifyDataSetChanged();
}
@Override
public int getItemPosition(Object object) {
return PagerAdapter.POSITION_NONE;
}
@Override
public void destroyItem(ViewGroup collection, int position, Object view) {
collection.removeView((View) view);
}
@Override
public int getCount() {
return personModels.size();
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
我做了一些不同的工作,順利進行。 我們的想法是用動畫刪除當前項目(將其alpha設置為0),然后將左側或右側項目(帶動畫)水平平移到現在不可見的項目位置。 動畫完成后,我執行實際數據刪除和notfyDataSetChanged()調用。
這個remove()方法放在ViewPager的子類中
public void remove(int position, OnViewRemovedListener onViewRemovedListener) {
final int childCount = getChildCount();
if (childCount > 0) {
View toRemove = getChildAt(position);
int to = toRemove.getLeft();
final PagerAdapter adapter = getAdapter();
toRemove.animate()
.alpha(0)
.setDuration(getResources().getInteger(android.R.integer.config_shortAnimTime))
.setListener(new SimpleAnimatorListener() {
@Override
public void onAnimationEnd(Animator animation) {
if (childCount == 1) {
if (onViewRemovedListener != null) onViewRemovedListener.onRemoved(position, -1);
if (adapter!= null) adapter.notifyDataSetChanged();
}
}
})
.start();
if (childCount > 1) {
int newPosition = position + 1 <= childCount - 1 ? position + 1 : position - 1;
View replacement = getChildAt(newPosition);
int from = replacement.getLeft();
replacement.animate()
.setInterpolator(new DecelerateInterpolator())
.setDuration(getResources().getInteger(android.R.integer.config_mediumAnimTime))
.translationX(to - from)
.setListener(new SimpleAnimatorListener() {
@Override
public void onAnimationEnd(Animator animation) {
if (onViewRemovedListener != null) onViewRemovedListener.onRemoved(position, newPosition);
if (adapter!= null) adapter.notifyDataSetChanged();
}
})
.start();
}
}
}
public interface OnViewRemovedListener {
void onRemoved(int position, int newPosition);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.