【问题标题】:Button Pressed Background is Transparent Before Clicked按钮按下的背景在点击前是透明的
【发布时间】:2016-05-09 12:05:25
【问题描述】:

按下按钮后我实现了波纹动画。一切都很好,除了在我点击按钮是透明的之前,它不可能是可见的。

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:colorControlHighlight">
    <item android:id="@android:id/mask">
        <shape android:shape="rectangle">
            <corners android:radius="3dp"/>
            <solid android:color="?android:colorAccent" />
        </shape>
    </item>
</ripple>

这是我创建的自定义按钮类。

public class MyButton extends Button {


        public MyButton(final Context context) {
            super(context);
            init();
        }

        public MyButton(final Context context, final AttributeSet attrs) {
            super(context, attrs);
            init();
        }

        public MyButton(final Context context, final AttributeSet attrs,
                        final int defStyle) {
            super(context, attrs, defStyle);
            init();
        }

        private void init() {
            mPaint = new Paint();
            mPaint.setAlpha(100);
        }

        @Override
        public boolean onTouchEvent(@NonNull final MotionEvent event) {
            if (event.getActionMasked() == MotionEvent.ACTION_UP) {
                mDownX = event.getX();
                mDownY = event.getY();

                ObjectAnimator animator = ObjectAnimator.ofFloat(this, "radius", 0,
                        getWidth() * 3.0f);
                animator.setInterpolator(new AccelerateInterpolator());
                animator.setDuration(400);
                animator.start();
            }
            return super.onTouchEvent(event);
        }

        public void setRadius(final float radius) {
            mRadius = radius;
            if (mRadius > 0) {
                RadialGradient radialGradient = new RadialGradient(mDownX, mDownY,
                        mRadius * 3, Color.TRANSPARENT, getResources().getColor(R.color.colorPrimaryDark),
                        Shader.TileMode.MIRROR);
                mPaint.setShader(radialGradient);
            }
            invalidate();
        }

        private Path mPath = new Path();
        private Path mPath2 = new Path();

        @Override
        protected void onDraw(@NonNull final Canvas canvas) {
            super.onDraw(canvas);

            mPath2.reset();
            mPath2.addCircle(mDownX, mDownY, mRadius, Path.Direction.CW);

            canvas.clipPath(mPath2);

            mPath.reset();
            mPath.addCircle(mDownX, mDownY, mRadius / 3, Path.Direction.CW);

            canvas.clipPath(mPath, Region.Op.DIFFERENCE);

            canvas.drawCircle(mDownX, mDownY, mRadius, mPaint);
        }
    }

这是我使用 myButton 类的地方

 <io.wyntr.peepster.MyButton
            android:layout_width="325dp"
            android:layout_height="60dp"
            android:layout_marginTop="10dp"
            android:textSize="20dp"
            android:textAllCaps="false"
            android:text="Continue"
            android:id="@+id/sendCodeButton"
            style="@style/Widget.AppCompat.Button.Borderless"
            android:clickable="true"
            android:background="@drawable/ripple"
            android:textColor="@color/icons"
            android:layout_gravity="center_horizontal" />

截图:

【问题讨论】:

  • 可以截图吗?
  • 在单击之前尝试为按钮保留不同的背景,然后单击以编程方式为按钮添加“@drawable/ripple”背景。
  • @McAwesomville 我会添加截图
  • @McAwesomville 我已经添加了截图
  • 你想让按钮有特定的颜色吗?喜欢使用ripple.xml 的按钮的默认颜色?

标签: android


【解决方案1】:

正在等待您回复我的评论,但会继续添加我的答案:

您可以通过添加来设置将使用ripple 动画的按钮的颜色

<item android:drawable="@android:color/holo_blue_bright" />

像这样:

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:colorControlHighlight">
    <item android:id="@android:id/mask">
        <shape android:shape="rectangle">
            <corners android:radius="3dp" />
            <solid android:color="?android:colorAccent" />
        </shape>
    </item>
    <item android:drawable="@android:color/holo_blue_bright" />
</ripple>

对此进行了测试。使用时,按钮的默认颜色(未按下)变为holo_blue_bright。这是我认为对您有用的post。 :)

希望这会有所帮助。干杯。 :)

【讨论】:

    【解决方案2】:

    这条线移除了按钮的边框,所以它当然是不可见的 尝试将其更改为其他内容

    style="@style/Widget.AppCompat.Button.Borderless"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-11
      • 2014-12-19
      • 2020-04-08
      • 2014-02-13
      • 2014-01-04
      相关资源
      最近更新 更多