Java 选择时如何更改cardview的颜色?单击

Java 选择时如何更改cardview的颜色?单击,java,android,android-cardview,android-gridlayout,Java,Android,Android Cardview,Android Gridlayout,我试着用卡片视图而不是按钮,我喜欢你能添加的信息量。但是我试着这样做,如果他们按下卡片,它就会改变颜色。我希望一旦他们发布,它就可以换回来。因此,它的工作方式与我的按钮类似 我可以得到它,这样它会在点击时改变,但它会一直保持不变,直到活动被销毁 这是我现在用来改变颜色的代码 public void setSingleEvent(GridLayout maingrid) { for (int i = 0; i < maingrid.getChildCount(); i++) {

我试着用卡片视图而不是按钮,我喜欢你能添加的信息量。但是我试着这样做,如果他们按下卡片,它就会改变颜色。我希望一旦他们发布,它就可以换回来。因此,它的工作方式与我的按钮类似

我可以得到它,这样它会在点击时改变,但它会一直保持不变,直到活动被销毁

这是我现在用来改变颜色的代码

public void setSingleEvent(GridLayout maingrid) {
    for (int i = 0; i < maingrid.getChildCount(); i++) {
        final CardView cardView = (CardView) maingrid.getChildAt(i);
        final int finalI = i;
        cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(mcontext, "Button: " + finalI, Toast.LENGTH_SHORT).show();
                cardView.setCardBackgroundColor(mcontext.getResources().getColor(R.color.buttonPressed));
                if (finalI == 0) {
                    mcontext.startActivity(new Intent(mcontext, Genre_Streaming.class));
                }
            }
        });
public void setSingleEvent(网格布局主网格){
对于(int i=0;i
您可以尝试使用
onTouchListener
而不是
onClickListener
来捕获“运动事件”。这是一个用于报告运动(鼠标、笔、手指、轨迹球)事件的对象


以下是android中的运动事件常量列表

您可以尝试使用
OnTouchListener
ACTION\u DOWN
ACTION\u UP
来处理新闻/发布事件,而不是
OnClickListener

修改代码

public void setSingleEvent(GridLayout maingrid) {
    for (int i = 0; i < maingrid.getChildCount(); i++) {
        final CardView cardView = (CardView) maingrid.getChildAt(i);
        final int finalI = i;

        cardView.setOnTouchListener(new OnTouchListener () {
          public boolean onTouch(View view, MotionEvent event) {
            if (event.getAction() == android.view.MotionEvent.ACTION_DOWN) {
              Toast.makeText(mcontext, "Button: " + finalI, Toast.LENGTH_SHORT).show();
              cardView.setCardBackgroundColor(mcontext.getResources().getColor(R.color.buttonPressed));
              if (finalI == 0) {
                  mcontext.startActivity(new Intent(mcontext, Genre_Streaming.class));
              }
            } else if (event.getAction() == android.view.MotionEvent.ACTION_UP) {
              /* Reset Color */
              cardView.setCardBackgroundColor(mcontext.getResources().getColor(R.color.red));
            }
            return true;
          }
        }
}
public void setSingleEvent(网格布局主网格){
对于(int i=0;i

链接:

@markharrop不客气!我很高兴它解决了您的问题。
public void setSingleEvent(GridLayout maingrid) {
    for (int i = 0; i < maingrid.getChildCount(); i++) {
        final CardView cardView = (CardView) maingrid.getChildAt(i);
        final int finalI = i;

        cardView.setOnTouchListener(new OnTouchListener () {
          public boolean onTouch(View view, MotionEvent event) {
            if (event.getAction() == android.view.MotionEvent.ACTION_DOWN) {
              Toast.makeText(mcontext, "Button: " + finalI, Toast.LENGTH_SHORT).show();
              cardView.setCardBackgroundColor(mcontext.getResources().getColor(R.color.buttonPressed));
              if (finalI == 0) {
                  mcontext.startActivity(new Intent(mcontext, Genre_Streaming.class));
              }
            } else if (event.getAction() == android.view.MotionEvent.ACTION_UP) {
              /* Reset Color */
              cardView.setCardBackgroundColor(mcontext.getResources().getColor(R.color.red));
            }
            return true;
          }
        }
}