gpt4 book ai didi

android - CardView onTouch onClick

转载 作者:行者123 更新时间:2023-11-30 05:09:56 25 4
gpt4 key购买 nike

我试图在 CardView 被点击时为它设置动画,但 onTouch 方法对其不起作用。 View 没有注意到触摸,但在 android studio 中显示以下信息:

Custom view MaterialCardView has setOnTouchListener called on it but does not override performClick less... (Strg+F1) If a View that overrides onTouchEvent or uses an OnTouchListener does not also implement performClick and call it when clicks are detected, the View may not handle accessibility actions properly. Logic handling the click actions should ideally be placed in View#performClick as some accessibility services invoke performClick when a click action should occur. Issue id: ClickableViewAccessibility

我添加了这个:所以我添加了这个东西:

@SuppressLint("ClickableViewAccessibility")

但无论如何它都不起作用,但也许这可能是错误。

这是我的 CardViewAdapter.class

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.support.annotation.NonNull;
import android.support.design.card.MaterialCardView;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashMap;

public class CardViewAdapter extends RecyclerView.Adapter<CardViewAdapter.CardViewHolder> {

private ArrayList<HashMap<String, String>> listItems;
private Context context;
private Resources resources;


public CardViewAdapter(ArrayList<HashMap<String, String>> listItems, Context context, Resources resources) {
this.listItems = listItems;
this.context = context;
this.resources = resources;
}

@NonNull
@Override
public CardViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int position) {
View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_illness_card, parent, false);
return new CardViewHolder(layoutView);
}



@Override
public void onBindViewHolder(@NonNull CardViewHolder cardViewHolder, final int position) {
final HashMap<String, String> listItem = listItems.get(position);


int resID = resources.getIdentifier(listItem.get("image_1"), "drawable", context.getPackageName());

cardViewHolder.illnessTitle.setText(listItem.get("title_1"));
cardViewHolder.illnessSubtitle.setText(listItem.get("freetime_1"));
cardViewHolder.illnessEngagement.setText("");
cardViewHolder.illnesImage.setBackgroundResource(resID);

cardViewHolder.cardView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Toast.makeText(context, "Clicked!", Toast.LENGTH_SHORT).show();

int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN) {
v.setScaleX(0.95f);
v.setScaleY(0.95f);

} else if (action == MotionEvent.ACTION_UP) {
v.animate().cancel();
v.animate().scaleX(1f).setDuration(1000).start();
v.animate().scaleY(1f).setDuration(1000).start();
}

return false;
}
});



cardViewHolder.linearLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, ViewPagerPreviewActivity.class);
intent.putExtra("position", position);
context.startActivity(intent);
}
});
}

@Override
public int getItemCount() {
return listItems.size();
}

public class CardViewHolder extends RecyclerView.ViewHolder {

ImageView illnesImage;
TextView illnessTitle;
TextView illnessSubtitle;
LinearLayout linearLayout;
TextView illnessEngagement;
MaterialCardView cardView;


public CardViewHolder(@NonNull View itemView) {
super(itemView);
cardView = itemView.findViewById(R.id.materialCard);
illnesImage = itemView.findViewById(R.id.illness_image);
illnessTitle = itemView.findViewById(R.id.illness_title);
illnessSubtitle = itemView.findViewById(R.id.illness_description);
linearLayout = itemView.findViewById(R.id.linearLayout);
illnessEngagement = itemView.findViewById(R.id.illness_engagement);


}

}
}

如果有人能帮助我,那就太好了! :)

最佳答案

当您按照文档所述在 View 上实现“OnTouchListener”时,应该手动调用“performClick()”方法;好的?所以你把你的代码改成这样:

cardViewHolder.cardView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Toast.makeText(context, "Clicked!", Toast.LENGTH_SHORT).show();

int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN) {
v.setScaleX(0.95f);
v.setScaleY(0.95f);

} else if (action == MotionEvent.ACTION_UP) {
v.animate().cancel();
v.animate().scaleX(1f).setDuration(1000).start();
v.animate().scaleY(1f).setDuration(1000).start();

// Here for example
performClick();
}

return false;
}
});

何时调用点击由您决定!在这里我说当 action == MotionEvent.ACTION_UP 时调用 click

关于android - CardView onTouch onClick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53907723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com