新手在这里。当长时间按下卡片(列表项)时,我很难在单个列表项上实现动画。当我长按一张卡片时,所有卡片都会动画化。有人可以解释为什么只有当回收器View的水平滚动被我禁用时才会发生此问题。
主要活动:
public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
TextView score;
ArrayList words = new ArrayList();
wordCardsList wc;
static int scored = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vibrator = (Vibrator)getSystemService(VIBRATOR_SERVICE);
final int initialDatasetSize = words.size();
score = findViewById(R.id.score);
score.setText("" + 0 + "/" + initialDatasetSize);
recyclerView = findViewById(R.id.recyclerView);
wc = new wordCardsList(this, words);
final LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false){
@Override
public boolean canScrollHorizontally() {
return false;
}
};
final GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 1, GridLayoutManager.HORIZONTAL, false);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setAdapter(wc);
new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.UP) {
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
return false;
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
mediaPlayer.start();
vibrator.vibrate(6);
if(words.size()!=1) {
int pos = viewHolder.getAdapterPosition();
words.remove(pos);
System.out.println(words.size());
wc.notifyDataSetChanged();
}
score.setText("" + ++scored + "/" + initialDatasetSize);
}
}).attachToRecyclerView(recyclerView);
}
}
回收器视图适配器:
public class wordCardsList extends RecyclerView.Adapter<wordCardsList.PersonViewHolder>{
private ArrayList words;
private Context context;
Converter converter = new Converter();
int longPressCount = 0;
public wordCardsList(Context context, ArrayList words) {
this.words = words;
this.context = context;
}
@Override
public PersonViewHolder onCreateViewHolder(ViewGroup parent, final int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.card, parent, false);
final PersonViewHolder personViewHolder = new PersonViewHolder(view);
longPressCount = 1;
return personViewHolder;
}
@Override
public void onBindViewHolder(wordCardsList.PersonViewHolder holder, int position) {
final String word = words.get(position).toString();
holder.words.setText(word);
holder.cardView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
//Working: System.out.println("Long Pressed on" + personViewHolder.getAdapterPosition());
if(longPressCount == 1) {
float pixels = converter.convertDpToPixel(190f, context);
view.findViewById(R.id.cardLayout).animate().translationY(-pixels).setDuration(100).start();
view.findViewById(R.id.exampleHeading).animate().alpha(1f).setDuration(400).start();
view.findViewById(R.id.example1).animate().alpha(1f).setDuration(400).start();
view.findViewById(R.id.example2).animate().alpha(1f).setDuration(400).start();
view.findViewById(R.id.definitionHeading).animate().alpha(1f).setDuration(400).start();
view.findViewById(R.id.definition1).animate().alpha(1f).setDuration(400).start();
vibrator.vibrate(6);
scored--;
longPressCount=0;
}
return true;
}
});
}
@Override
public int getItemCount() {
return words.size();
}
class PersonViewHolder extends RecyclerView.ViewHolder{
public TextView words;
public CardView cardView;
public PersonViewHolder(View view) {
super(view);
words = view.findViewById(R.id.wordName);
cardView = view.findViewById(R.id.card);
}
}
}
您不想在java程序中执行的操作只是在您的XML卡中进行一些更改,如下所示
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.CardView
android:id="@+id/card_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_margin="@dimen/size_5"
android:elevation="3dp"
card_view:cardCornerRadius="@dimen/size_5">
<LinearLayout
android:id="@+id/list_header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/size_20"
android:layout_marginRight="@dimen/size_20"
android:background="?attr/selectableItemBackgroundBorderless"
android:orientation="vertical"
android:paddingBottom="@dimen/font_10"
android:paddingTop="@dimen/font_10">
</LinearLayout>
</android.support.v7.widget.CardView>
</LinearLayout>
主要的变化是在你的LinearLayout中添加这一行,仅此而已
android:background=“attr/selectableitemsbackgroundless”
我正在使用RecyclerView,并有一些动画,我可以在ViewHolder项目中放大一个相对布局。 注意:它不是添加/删除/插入动画。当用户在 ViewHolder 项中交互时,它将启动。因此,我在这里没有使用ItemAnimator。 动画工作正常,但它会在某个随机视图项中重新出现(最终状态)。我知道这是由于物品的重复使用,我也在清除动画,但这没有帮助。 我在节目里做这个 在onViewDe
我正面临一个奇怪的错误,其中recyclerview只显示了一个项目。下面是我的recyclerview适配器的代码: 我已经在其他应用程序中使用了这段代码,它的工作非常完美。我已经检查了聊天数据,这也是完美的。 这里是指向git repo布局文件的链接:布局文件
然后,在每个@test方法中,我调用activitytestrule.launchactivity(Intent.action_main)),然后进行单击。我发现,只有第一次点击不起作用,但第二次和第三次点击起作用。那么,这种行为的原因又能是什么呢?
在其他回收器视图中有一个回收器视图。两者都需要垂直滚动。外部回收器视图滚动正常,但内部回收器视图滚动不正常。 这是代码: ViewAdapter如下: 我尝试了以下两种回收商观点,但都无法解决问题 也尝试了这个:
这是我的适配器 我想每次滚动一个项目。比如你在Instagram上看到多张照片。我怎么能那样做? 谢谢 和我的XML;
我在机器人中有一个回收站视图。我已向其附加了。我只启用了从左向右滑动。 因此,当我在Recycle视图中滑动任何项目时,该项目开始向右移动,在左侧我绘制一个文本。这很好。我的要求是,我只允许用户滑动一定距离,当达到该距离并且用户释放触摸时,被滑动的项目应该回到其向左的位置。 问题是,当我从左向右滑动时,视图会被完全从屏幕上刷掉。我如何才能将其限制为仅在一定距离内滑动?我该怎么做? 以下是我的物品触