java 如何在选择时更改cardview的颜色?

9jyewag0  于 2022-10-30  发布在  Java
关注(0)|答案(2)|浏览(116)

我正在尝试卡片视图而不是按钮,我喜欢你可以添加到它们的信息量。但我正在尝试使它,如果他们按下卡片,它会改变颜色。我希望它改变回来,一旦他们释放,所以它的工作方式类似于我的按钮。
我可以得到它,使它改变点击,但它保持这样,直到活动被摧毁。
这是我现在用来改变颜色的代码:

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));
                }
            }
        });
fkvaft9z

fkvaft9z1#

您可以尝试将OnTouchListenerACTION_DOWNACTION_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;
          }
        }
}

**链接:**developer.android.com/reference/android/view/MotionEvent.html#ACTION_UP

dwthyt8l

dwthyt8l2#

您可以尝试使用onTouchListener而不是onClickListener来捕获“运动事件”,这是一个用于报告移动(鼠标、笔、手指、轨迹球)事件的对象。

cardview.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            // set color here
        } else if (event.getAction() == MotionEvent.ACTION_UP) {
            // set other color here
        }
    }
};

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

相关问题