当前位置: 首页 > 知识库问答 >
问题:

如何将动画应用于Android中视图的setBackground颜色属性?

邓德惠
2023-03-14

我试图实现以下和编辑文本,当验证失败时,编辑文本的行将颜色更改为红色,颜色更改是从中心到边缘的动画。

我将视图设置为,隐藏编辑文本底线,在编辑文本下方添加视图以显示该行

    <android.support.design.widget.TextInputLayout
    android:id="@+id/fpet_text_input_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="left"
    android:orientation="horizontal"
    app:errorEnabled="false"
    app:hintAnimationEnabled="true"
    android:theme="@style/TextLabel">

    <EditText
      android:id="@+id/fpet_edit_text"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:textColorHighlight="@color/blue"
      android:background="@null"
      android:textColorLink="@color/blue"
      android:paddingTop="5dp"
      android:textSize="18dp"
      />


  </android.support.design.widget.TextInputLayout>


  <ImageView
    android:id="@+id/fpet_line"
    android:layout_width="match_parent"
    android:layout_height="2dp"
    android:layout_marginTop="5dp"
    android:layout_below="@id/fpet_text_input_layout"
    android:background="@color/grey"></ImageView>

我已经尝试了多种方法,但仍然无法完全正确地进入。这是我到目前为止所尝试的

>

  • 在设置背景之前使用缩放动画并开始动画。但在这种情况下,线条被重新绘制,而不仅仅是改变颜色

    我已经尝试使用值动画,但我找不到一个合适的方法来应用自定义动画,而不是淡入行为。

    Integer colorFrom = getResources().getColor(R.color.grey);
    Integer colorTo = getResources().getColor(color);
    ValueAnimator colorAnimator = ValueAnimator.ofObject(new ArgbEvaluator(),      colorFrom, colorTo);
    colorAnimator.setDuration(1000);
    colorAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener()     {
    
    @Override
    public void onAnimationUpdate(ValueAnimator animator) {
       underLine.setBackgroundColor((Integer)animator.getAnimatedValue());
    }
    
    });
    colorAnimator.start();
    

    我非常感谢对此的任何帮助,我可以为我尝试过的内容添加更多代码,我不想让问题太长。南克斯

  • 共有1个答案

    鞠侯林
    2023-03-14

    我试图达到你想要的效果。

    public class AnimatedEditText extends EditText {
        private Paint paint;
        private Rect rect;
    
        public AnimatedEditText(Context context) {
            super(context);
        }
    
        public AnimatedEditText(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public AnimatedEditText(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
    
        @TargetApi(Build.VERSION_CODES.LOLLIPOP)
        public AnimatedEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
            super(context, attrs, defStyleAttr, defStyleRes);
        }
    
        @Override
        protected void onFinishInflate() {
            super.onFinishInflate();
            paint = new Paint();
            paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP));
            paint.setColor(Color.RED);
            rect = new Rect();
            setLayerType(LAYER_TYPE_SOFTWARE, null);
        }
    
        public void playAnimation() {
            rect.top = getMeasuredHeight() - getResources().getDimensionPixelSize(R.dimen.line_offset);
            rect.bottom = getMeasuredHeight();
            rect.left = getMeasuredWidth() / 2;
            rect.right = getMeasuredWidth() / 2;
            ValueAnimator animator = ValueAnimator.ofPropertyValuesHolder(PropertyValuesHolder.ofInt("left", rect.left, 0), PropertyValuesHolder.ofInt("right", rect.right, getMeasuredWidth()));
            animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                @Override
                public void onAnimationUpdate(ValueAnimator animation) {
                    rect.left = (int) animation.getAnimatedValue("left");
                    rect.right = (int) animation.getAnimatedValue("right");
                }
            });
            animator.setDuration(500);
            animator.start();
        }
    
        @Override
        protected void onDraw(Canvas canvas) {
            super.onDraw(canvas);
            canvas.drawRect(rect, paint);
            invalidate();
        }
    }
    
     类似资料:
    • 我有一个,它是一个全黑的小符号。正在我拥有的自定义子类中设置。是否有可能让图像对其应用,从而代替黑色图像将颜色更改为的任何颜色? 我只是想避免创造新的资产。

    • 好。。。我在这里疯了。我已经开始尝试使用 SVG。使用 SVG 并对其应用 CSS 类就像一个魅力。我只是无法弄清楚我做错了什么,但我只是无法让类在svg文本元素上工作。我已经把它一直剥离了,这就是我得到的: 根据http://www.w3.org/TR/SVG/styling.html#ClassAttribute这应该行得通。。。 关于要更改的内容或替代方案的任何提示/提示?

    • 问题内容: 我是JFreeChart的新手,我正在尝试看看什么动作可以做什么。 在我的图表中,我只有一个系列,并且我希望-根据值设置-为柱形设置其他颜色。例如 : 这是我到达的地方,我被困在这里,真的不知道要去哪里。我在文档中看到Paint是一个接口,但是没有实现此接口的类都没有提供setXXX()方法。所以,我的两个问题是: 如何为单个条形设置颜色? 如何将其应用于图表? 问题答案: 您需要创建

    • 问题内容: 我想更改主视图(而不是按钮或文本视图)的背景颜色,而只是通常是黑色的真实背景…我得到了以下代码: 它在的内部,但只是更改了Button的背景。 问题答案: 尝试用类似的方法创建一个方法… 然后从您的OnClickListener调用它,并传递您想要的任何颜色。

    • 问题内容: 我有一个动画,其中数据范围变化很​​大。我想有一个跟踪数据的最大值和最小值(即我希望它不固定)。问题是如何做到这一点。 理想情况下,我希望该轴独立。 我尝试了以下四件事 1.天真的方法 问题:每帧都有一个新的彩条 2.添加到图像 将上面的for循环更改为 问题:这引起了 3.在自己的轴上绘制 问题:尚未更新。 2.和4.的组合 问题:常数。 问题答案: 虽然我不确定如何使用来具体实现,

    • 当前为 5.4 版本,稍后将升级到 5.5。在 5.5 中,本节内容被拆分成了多个小节。 使用动画视图 在 Unity 中,动画视图用于预览和编辑游戏对象的动画剪辑。动画视图可以通过菜单 Window -> Animation 打开。 查看游戏对象上的动画 动画视图和层级视图、场景视图以及检视视图紧密耦合。类似于检视视图,动画视图将显示当前选中对象的动画的时间轴和关键帧。你也可以在层级视图或场景视