Android 控制回收器视图的投掷速度
我有一个Android 控制回收器视图的投掷速度,android,android-recyclerview,Android,Android Recyclerview,我有一个RecyclerView,其中有一个图像,一些TextViews和2个ImageButtons。 我的活动中有7-8行这样的行要显示。 在安卓4.4.4及以下版本中,卷轴非常平滑,但在棒棒糖中,卷轴会产生一些震动效果。 我认为控制RecyclerView的投掷速度就可以了。 我搜索了一下,但什么也没找到。相反,我找到了如何将视野移到一个特定的位置进行放纵 val maxFling=4000 onFlingListener = object : Recycl
RecyclerView
,其中有一个图像,一些TextView
s和2个ImageButton
s。
我的活动中有7-8行这样的行要显示。
在安卓4.4.4及以下版本中,卷轴非常平滑,但在棒棒糖中,卷轴会产生一些震动效果。
我认为控制RecyclerView
的投掷速度就可以了。
我搜索了一下,但什么也没找到。相反,我找到了如何将视野移到一个特定的位置进行放纵
val maxFling=4000
onFlingListener = object : RecyclerView.OnFlingListener() {
override fun onFling(velocityX: Int, velocityY: Int): Boolean {
if (velocityY > maxFling) {
fling(velocityX, maxFling)
return true
} else if (velocityY < -maxFling) {
fling(velocityX, -maxFling)
return true
} else {
return false
}
}
}
但我想控制投掷速度。可以使用摩擦力。以及如何使用摩擦力
menuRecyclerView = (RecyclerView) findViewById(R.id.menuList);
menuRecyclerView.setHasFixedSize(true);
LinearLayoutManager llm = new LinearLayoutManager(context);
menuRecyclerView.setLayoutManager(llm);
Scroller sc = new Scroller(context);
sc.setFriction(ViewConfiguration.getScrollFriction() * 10);
这是我用来设置rcycler视图布局的适配器
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import news.circle.circle.R;
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.CustomViewHolder> {
public RecyclerViewAdapter(Context context, List<MenuDescription> listOrder, DatabaseHandlerCart db
, List<MenuDescription> vegList, List<MenuDescription> nonVegList, String menuTextData) {
this.listOrder = listOrder;
this.inflater = LayoutInflater.from(context);
this.context = context;
imageLoader = new ImageLoader(context);
this.db = db;
this.vegList = vegList;
this.nonVegList = nonVegList;
this.completeList = listOrder;
this.menuTextData = menuTextData;
}
@Override
public RecyclerViewAdapter.CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
if (viewType == TYPE_ITEM) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_view, parent, false);
return new CustomViewHolder(view, viewType);
} else if (viewType == TYPE_HEADER) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.header, parent, false);
return new CustomViewHolder(view, viewType);
}
return null;
}
@Override
public void onBindViewHolder(final RecyclerViewAdapter.CustomViewHolder holder, int position) {
if (holder.Holderid == 1) {
final MenuDescription menu = listOrder.get(position - 1);
holder.title.setText(menu.getName() + "");
holder.quant.setText(menu.getQuantity() + "");
holder.description.setText(menu.getDescription());
holder.title.setTypeface(Fonts.getFont(context, Constants.AVENIR_REGULAR));
holder.description.setTypeface(Fonts.getFont(context, Constants.AVENIR_REGULAR));
Glide.with(context).load(menu.getFlag_path()).placeholder(R.drawable.ic_order_now).fitCenter().into(holder.image);
holder.inc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (Constants.internet) {
menu.decrQuantity();
if (menu.getQuantity() == 0) {
menu.setDecr_button_visibility(0);
try {
db.DeleteCartItem(menu.getItem_id());
} catch (SQLException e) {
e.printStackTrace();
}
} else {
try {
db.updateQuantity(menu.getQuantity(), menu.getItem_id());
} catch (SQLException e) {
e.printStackTrace();
}
}
holder.quant.setText(menu.getQuantity() + "");
notifyDataSetChanged();
} else {
Toast.makeText(context, "Please check your internet connection", Toast.LENGTH_SHORT).
}
show();
}
});
holder.decr.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (Constants.internet) {
try {
if (!db.CheckIsItemAlreadyInDBorNot(menu.getItem_id(), "cart")) {
menu.incrQuantity();
db.addDataToCart(menu);
// cart_items.add(menu);
holder.quant.setText(menu.getQuantity() + "");
} else {
menu.incrQuantity();
db.updateQuantity(menu.getQuantity(), menu.getItem_id());
holder.quant.setText(menu.getQuantity() + "");
}
} catch (SQLException | IllegalStateException e) {
e.printStackTrace();
}
if (menu.getDecr_button_visibility() == 1) {
holder.decr.setVisibility(View.VISIBLE);
holder.quant.setVisibility(View.VISIBLE);
if (total == 1)
RecyclerViewMainActivity.bottomBarUp();
notifyDataSetChanged();
} else
Toast.makeText(context, "Please check your internet connection", Toast.LENGTH_SHORT).show();
}
}
});
}
}
@Override
public int getItemCount() {
return (null != listOrder ? listOrder.size() + 1 : 0);
}
@Override
public int getItemViewType(int position) {
if (isPositionHeader(position))
return TYPE_HEADER;
return TYPE_ITEM;
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
private boolean isPositionHeader(int position) {
return position == 0;
}
}
导入android.content.Context;
导入android.support.v7.widget.RecyclerView;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.Toast;
导入com.bumptech.glide.glide;
导入新闻.circle.circle.R;
公共类RecycleServiceAdapter扩展了RecyclerView.Adapter{
公共RecycleServiceAdapter(上下文上下文、列表顺序、DatabaseHandlerCart数据库
,列表vegList,列表noneglist,字符串menuTextData){
this.listOrder=listOrder;
this.inflater=layoutiner.from(上下文);
this.context=上下文;
imageLoader=新的imageLoader(上下文);
这个.db=db;
this.vegList=vegList;
this.noneglist=非eglist;
this.completeList=listOrder;
this.menuTextData=menuTextData;
}
@凌驾
public RecycleServiceAdapter.CustomViewHolder onCreateViewHolder(视图组父级,int-viewType){
if(viewType==类型\项){
View View=LayoutInflater.from(parent.getContext()).flate(R.layout.recycler\u视图,parent,false);
返回新的CustomViewHolder(视图,viewType);
}else if(viewType==类型\标题){
View=LayoutInflater.from(parent.getContext()).flate(R.layout.header,parent,false);
返回新的CustomViewHolder(视图,viewType);
}
返回null;
}
@凌驾
BindViewHolder上的公共无效(最终RecycleServiceAdapter.CustomViewHolder,int位置){
if(holder.Holderid==1){
final MenuDescription menu=listOrder.get(位置-1);
holder.title.setText(menu.getName()+);
holder.quant.setText(menu.getQuantity()+);
holder.description.setText(menu.getDescription());
holder.title.setTypeface(Fonts.getFont(context,Constants.AVENIR_REGULAR));
setTypeface(Fonts.getFont(context,Constants.AVENIR_REGULAR));
Glide.with(context).load(menu.getFlag_path()).placeholder(R.drawable.ic_order_now).fitCenter()插入(holder.image);
holder.inc.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
if(常数.互联网){
menu.decrament();
如果(menu.getQuantity()==0){
菜单。设置DECRU按钮的可见性(0);
试一试{
db.DeleteCartItem(menu.getItem_id());
}捕获(SQLE异常){
e、 printStackTrace();
}
}否则{
试一试{
db.updateQuantity(menu.getQuantity(),menu.getItem_id());
}捕获(SQLE异常){
e、 printStackTrace();
}
}
holder.quant.setText(menu.getQuantity()+);
notifyDataSetChanged();
}否则{
Toast.makeText(上下文,“请检查您的internet连接”,Toast.LENGTH\u SHORT)。
}
show();
}
});
holder.decr.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(常数.互联网){
试一试{
如果(!db.CheckIsItemAlreadyInDBorNot(menu.getItem_id(),“cart”)){
menu.incrQuantity();
db.addDataToCart(菜单);
//购物车项目。添加(菜单);
holder.quant.setText(menu.getQuantity()+);
}否则{
menu.incrQuantity();
db.updateQuantity(menu.getQuantity(),menu.getItem_id());
holder.quant.setText(menu.getQuantity()+);
}
}捕获(SQLException |非法状态异常e){
e、 printStackTrace();
}
if(menu.getDecr_按钮_可见性()==1){
保持架decr.setVisibility(视图可见);
holder.quant.setVisibility(视图可见);
如果(总数=1)
RecycleServiceMainActivity.bottomBarUp();
notifyDataSetChanged();
}否则
Toast.makeText(上下文,“请检查您的internet连接”,Toast.LENGTH_SHORT.show();
}
}
});
}
}
@凌驾
public int getItemCount(){
返回值(null!=listOrder?listOrder.size()+1:0);
}
@凌驾
public int getItemViewType(int位置){
if(isPositionHeader(位置))
返回类型_头;
返回类型\ U项目;
}
@Override
public boolean fling(int velocityX, int velocityY)
{
// if FLING_SPEED_FACTOR between [0, 1[ => slowdown
velocityY *= FLING_SPEED_FACTOR;
return super.fling(velocityX, velocityY);
}
mRecyclerView.setOnFlingListener(new RecyclerView.OnFlingListener() {
@Override
public boolean onFling(int velocityX, int velocityY) {
if (Math.abs(velocityY) > MAX_VELOCITY_Y) {
velocityY = MAX_VELOCITY_Y * (int) Math.signum((double)velocityY);
mRecyclerView.fling(velocityX, velocityY);
return true;
}
return false;
}
});
val maxFling=4000
onFlingListener = object : RecyclerView.OnFlingListener() {
override fun onFling(velocityX: Int, velocityY: Int): Boolean {
if (velocityY > maxFling) {
fling(velocityX, maxFling)
return true
} else if (velocityY < -maxFling) {
fling(velocityX, -maxFling)
return true
} else {
return false
}
}
}