如何解决如何为线性 recyclerView 创建爆炸动画
我正在尝试为我的线性布局回收视图制作爆炸动画。所以当我按下屏幕时,所有的项目都很好地飞走了。但出于某种原因,动画一开始,它就只发生在屏幕非常狭窄的部分,其他一切都被切掉了。
这里是主要活动代码:
package com.stanislav.disturber;
import...
public class MainActivity extends AppCompatActivity {
List<Alarm> alarms;
RecyclerView recyclerView;
private final int DND_OFF = 0;
private final int DND_ON = 1;
@SuppressLint("ClickableViewAccessibility")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
Window w = getWindow(); // in Activity's onCreate() for instance
w.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}
alarms = new ArrayList<>();
Alarm firstAlarm = new Alarm("This is the on alarm\n\n");
firstAlarm.setAlarmKind(DND_ON);
alarms.add(firstAlarm);
Alarm thAlarm = new Alarm("And this one is the off alarm\n\n");
secondAlarm.setAlarmKind(DND_OFF);
alarms.add(thAlarm);
...
Alarm niAlarm = new Alarm("And this one is the off alarm\n\n");
secondAlarm.setAlarmKind(DND_OFF);
alarms.add(niAlarm);
recyclerView = findViewById(R.id.recycler_view);
recyclerView.setOverScrollMode(View.OVER_SCROLL_NEVER);
DisturberAdapter disturberAdapter = new DisturberAdapter(alarms,this);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,true);
linearLayoutManager.scrollToPosition(alarms.size()-1);
RecyclerView.ItemAnimator itemAnimator = new DefaultItemAnimator();
recyclerView.setAdapter(disturberAdapter);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setItemAnimator(itemAnimator);
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v,MotionEvent event) {
// save rect of view in screen coordinates
final Rect viewRect = new Rect();
v.getGlobalVisibleRect(viewRect);
// create Explode transition with epicenter
Transition explode = new Explode();
explode.setEpicenterCallback(new Transition.EpicenterCallback() {
@Override
public Rect onGetEpicenter(Transition transition) {
return viewRect;
}
});
explode.setDuration(7000);
TransitionManager.beginDelayedTransition(recyclerView,explode);
// remove all views from Recycler View
recyclerView.setAdapter(null);
return false;
}
});
}
}
解决方法
发现当recyclerview的高度设置为“包裹内容”时出现问题。但是如果没有“包装内容”,如果只有很少的卡片,在地球上怎么会有卡片?
此外,当高度设置为“包裹内容”时,导致问题的原因是什么 - 在 recyclerview 中填充!!奇怪!
一个临时的解决方案是:在动画例程中,添加以下行,给recyclerview提供非常可笑的填充。然后一切都会好起来的。只是不要忘记在之后返回之前的填充!!代码:
recyclerView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v,MotionEvent event) {
//Set enormous padding
recyclerView.setPadding(0,2000,2000);
// save rect of view in screen coordinates
final Rect viewRect = new Rect();
//v.getGlobalVisibleRect(viewRect);
//create Explode transition with epicenter
Transition explode = new Explode();
explode.setEpicenterCallback(new Transition.EpicenterCallback() {
@Override
public Rect onGetEpicenter(Transition transition) {
return viewRect;
}
});
explode.setDuration(600);
TransitionManager.beginDelayedTransition(recyclerView,explode);
// remove all views from Recycler View
recyclerView.setAdapter(null);
return false;
}
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。