首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

设置EditText向左或向右可绘制动画

是通过自定义EditText的Drawable来实现的。具体步骤如下:

  1. 创建一个自定义的EditText类,继承自android.support.v7.widget.AppCompatEditText。
  2. 在自定义EditText类中重写onDraw()方法,在该方法中绘制动画效果。
  3. 在onDraw()方法中,获取EditText的Drawable对象,使用Canvas对象绘制Drawable。
  4. 使用属性动画或帧动画来实现向左或向右的动画效果。

下面是一个示例代码:

代码语言:txt
复制
import android.animation.ObjectAnimator;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.support.v7.widget.AppCompatEditText;
import android.util.AttributeSet;

public class AnimatedEditText extends AppCompatEditText {
    private Drawable leftDrawable;
    private ObjectAnimator animator;

    public AnimatedEditText(Context context) {
        super(context);
        init();
    }

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

    public AnimatedEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init();
    }

    private void init() {
        // 获取左侧Drawable
        leftDrawable = getCompoundDrawables()[0];
    }

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

        // 绘制左侧Drawable
        if (leftDrawable != null) {
            leftDrawable.setBounds(0, 0, leftDrawable.getIntrinsicWidth(), leftDrawable.getIntrinsicHeight());
            canvas.save();
            canvas.translate(getPaddingLeft(), getPaddingTop() + (getHeight() - leftDrawable.getIntrinsicHeight()) / 2);
            leftDrawable.draw(canvas);
            canvas.restore();
        }
    }

    public void startAnimation(boolean isLeft) {
        // 根据isLeft参数决定向左或向右的动画效果
        float start = isLeft ? 0 : getWidth() - getPaddingRight() - leftDrawable.getIntrinsicWidth();
        float end = isLeft ? getWidth() - getPaddingRight() - leftDrawable.getIntrinsicWidth() : 0;

        // 创建属性动画
        animator = ObjectAnimator.ofFloat(this, "translationX", start, end);
        animator.setDuration(1000);
        animator.start();
    }

    public void stopAnimation() {
        // 停止动画
        if (animator != null && animator.isRunning()) {
            animator.cancel();
        }
    }
}

使用该自定义EditText类时,可以调用startAnimation()方法来启动动画,调用stopAnimation()方法来停止动画。

这是一个简单的示例,你可以根据自己的需求进行扩展和修改。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云官网:https://cloud.tencent.com/
  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 人工智能(AI):https://cloud.tencent.com/product/ai
  • 物联网(IoT):https://cloud.tencent.com/product/iot
  • 移动开发(移动推送、移动分析):https://cloud.tencent.com/product/mobile
  • 区块链(BCS):https://cloud.tencent.com/product/bcs
  • 元宇宙(Tencent Cloud Metaverse):https://cloud.tencent.com/solution/metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

TextInputLayout的使用与实现

gradle配置文件 在对应的Layout文件中使用TextInputLayout将EditText控件包裹,并且在EditText设置hint属性即可,在这个父ViewGroup中,只能有一个EditText...Layout配置文件 TextInputLayout效果 在两个输入框切换点击切换的时候,EditText中的文本会有动画的方式飞向左上角。 ?...TextInputLayout效果 TextInputLayout动画实现原理 原本以为在点击输入框的时候,会是在EditText的Focus改变的时候,开始执行动画,结果发现是在整个TextInputLayout...expandHint 在animateToExpansionFraction函数中会判断当前Animator值是否和目标值一样,如果一样的话,则不用做动画了,否则则会使用ObjectAnimator设置...而在setExpansionFraction中,会根据当前的值和目标值计算出来要绘制的位置,以及颜色等,最后用ViewCompat的postInvalidateOnAnimation重绘View ?

1.2K40
  • 如何用Python画太极图?

    turtle的使用主要分为创建窗口、设置画笔和移动画笔三个方面,例如创建800*600像素的窗口,turtle.setup(800*600)。...turtle模块中定义了设置画笔属性和状态的函数,width()函数用于设置画笔尺寸,它的参数width设置画笔绘制出的线条的宽度;speed()函数的参数speed用于设置画笔移动的速度,其取值范围为...正如在纸上绘制一样,turtle中的画笔分为提起(UP)和放下(DOWN)两种状态。只有画笔为放下状态时,移动画笔,画布上才会留下痕迹。...forward()和backward(),他们有相同的参数distance,用于指定画笔移动的距离,单位为像素;用于角度控制函数right()和left(),他们有共同的参数degree,用于指定画笔向右向左的角度...除此之外,我们还需要用于图形绘制的circle()函数,使用该函数绘制以当前坐标为圆心,以指定像素值为半径的圆弧,函数circle()的参数radius用于设置半径,extent用于设置弧的角度。

    1.8K20

    Android中文API——PopupWindow

    公共方法: void dismiss() //使popup window消失 int getAnimationStyle() //返回该popup window出现消失的动画类型,返回值为整型...当popup window中包含EditText时可能会涉及这方面,可能是出现输入法显示在popup window后面,导致无法输入的问题,可以修改焦点和这里。...popup window的动画样式,有什么样式去Animation void setBackgroundDrawable(Drawable background) //设置pw背景 void setClippingEnabled...也就是说,如果这个Popupwindow显示区域 不足或者层叠将导致绘制位置计算不准确,需要手动设置为false */ boolean isClippingEnabled() Indicates whether...popup window是否触碰 void setWidth(int width) /*修改popup window的宽度,如果已经显示了popup window,修改后不会立即更新。

    1.1K20

    简单的 canvas 翻角效果

    此处效果需要用到的api如下(不做详细解释,w3c自行查询): 可能方法列举的不够详尽,见谅。...首先是绘制黑色翻出的部分,图形分解为如下几部分(请根据上图脑补): 左上角向右下的半弧 ╮ 然后是竖直向下的竖线 | 然后是向右的半圆 ╰ 再然后是向右的横线 接着还是向右下的半弧 ╮ 最后是将线连接会起点...于是第一步 我们要先将画笔移动到起始位置: 然后 于是第一个向右下的半弧完成,此时canvas上没有任何绘制内容,因为还没有执行过绘制方法例如strokefill。...上述画圆的代码意为:以(60,40)点为圆心,5为半径,逆时针从180度绘制到90度,180度就是圆心的水平向左 到达点(55,40),与上一步连接上,然后又因为屏幕向下为正,90度在圆心正下方,所以绘制出此半圆...文字绘制 接下来绘制"new",实际上是使用canvas简单的文本绘制,代码如下: 对于上述代码中,文字的相关api是属于没有难度的,只是设置而已,需要理解的部分在于translate和rotate。

    1.3K00

    【Python贪吃蛇】:编码技巧与游戏设计的完美结合

    这允许用户观察绘制的图形,而不会因为程序的结束而丢失绘图结果。 使用场景 在绘制图形动画的最后,你会调用turtle.done()来结束你的绘图脚本。...例如,在绘制完一个图形完成一个动画循环后,你可以使用它来防止程序立即退出,从而让用户有足够的时间来查看结果。...蛇移动的方向 aim = [0, 10] aim列表定义了蛇的移动方向,其中第一个元素是水平方向(向右为正,向左为负),第二个元素是垂直方向(向下为正,向上为负)。这里,蛇默认向上移动。...如果 x 为正,蛇将向右移动;如果为负,则向左移动;如果为0,则蛇的水平位置不变。 aim[1] = y:这行代码将垂直方向的移动增量更新为参数 y 的值。...将其设置为False可以关闭绘制方块时的动画效果,使方块几乎是立即出现的,这对于需要快速更新屏幕的游戏来说是必要的。

    18910

    HarmonyOS NEXT 阅读翻页方式案例

    点击设置按钮,弹出翻页方式切换按钮,点击切换翻页方式。左右翻页方式可点击翻页,也滑动翻页,点击屏幕左边1/3区域向左翻页,点击中间1/3区域弹出菜单,点击屏幕右边1/3区域向右翻页。...覆盖翻页方式可点击翻页,也滑动翻页,点击屏幕左边1/3区域向左翻页,点击中间1/3区域弹出菜单,点击屏幕右边1/3区域向右翻页。...使用Swiper组件和LazyForEach将数据源中的每条数据存放于Text组件中,Swiper向左向右滑动的效果就是左右翻页的效果。...设置小于0大于等于子组件数量时,按照默认值0处理。...将滑动翻页的动画和点击翻页的动画封装在一个闭包中,由isClick来判断是点击翻页还是滑动翻页,由isLeft来判断点击翻页中是向左翻页还是向右翻页。

    9320

    一个没有对手的英雄是什么体验?如何在你的Python游戏中添加反派

    设置一个图像一系列图像,然后设置对象的起始位置. 在开始之前,请确保您有敌人的图像文件,即使这只是临时图像也可以。...,请执行与player动画设置相同的操作。...例如,你告诉敌人的精灵向右走10步,然后向左走10步。敌人的子画面无法计数,因此你必须创建一个变量来跟踪敌人移动了多少步伐,并根据计数变量的值对敌人进行编程以使其向右向左移动....使用if-else去做一个所谓的infinite loop(无限循环): ·如果计数器的数字在0到100之间,则向右移动。 ·如果计数器的数字从100到200,则向左移动。...在这种情况下,计数器始终位于0到100100到200之间,因此敌人的精灵会永远从右向左走,从右向左走。

    1.7K40

    强大的提示控件TextInputLayout使用以及源码分析

    或者AutoCompleteTextView,以下几个属性和方法需要声明一下: app:hintAnimationEnabled="true"可以开启动画,这个为true时,获得焦点的时候hint提示问题会动画地移动上去...R.styleable.TextInputLayout_hintAnimationEnabled, true); 这里出现了一个mCollapsingTextHelper,通过它可以设置文字大小的加速动画...,比如给hint设置的文字,mHintAnimationEnabled,hint内文字的动画是否可用,还有hintAppearance的值,mErrorTextAppearance是错误提示文字的样式,...设置文本变化的监听,在文本改变之前,正在改变的时候都可以做相应的逻辑处理,往下看有更改EditText的Margin的方法 private LayoutParams updateEditTextMargin...,才会new一个TextView,这样是比较省性能的,接下来是setError方法,设置错误提示的文本信息,里面是一些判断和动画设置 public void setError(@Nullable CharSequence

    1.8K50

    提高效率 |ArcGIS Pro 中所有快捷键一网打尽

    更改活动视图窗格。 Ctrl+F6 更改活动视图。 Ctrl+F4 关闭视图。 动画 用于动画的键盘快捷键 键盘快捷键 操作 Ctrl + 右箭头 移动到下一关键帧。...空格键 播放暂停步骤。 Ctrl+Insert 将新的关键帧追加到动画结尾处最后一个关键帧之后。 Shift+Insert 更新设置关键帧。如果当前时间上存在一个关键帧,则该帧将被更新。...Z + 拖动 放大缩小。 放大缩小视图。 T 显示折点。 绘制新线时,按住可在指针附近显示现有要素的折点。 空格键 捕捉。 创建修改要素时,按住打开关闭捕捉功能。...在 2D 中,向右平移一个屏幕宽度。 在 3D 中,照相机在保持照相机角度和高度不变的同时会向右移动一个屏幕宽度。Esc取消地图绘制。 F5刷新活动视图。 Ctrl+F打开定位窗格。...左箭头键和右箭头键 从视图中心向左向右移动照相机。 按住左箭头右箭头键垂直于照相机当前的视图方向左向右移动照相机。当照相机移动时,调整鼠标指向以设置要相对垂直行驶的方向。

    1.1K20

    Android使用Activity实现简单的输入对话框

    --输入对话框的样式 -- <style name="EditDialogStyle" parent="Theme.AppCompat.Light.NoActionBar" //设置背景 <...获得焦点,那必须等界面绘制完毕才行。...所以这样设置了延迟300ms执行弹出软键盘的代码,给界面留出绘制的时间: new Handler(new Handler.Callback() { @Override public boolean...后来我还想过给对话框增加自定义的动画效果,但是退出时的动画始终没有设置成功,所以如果有读者实现了,欢迎交流学习。...源码我保存到了码云,需要的话可以参考:输入对话框源码 大家也可以通过本地下载:点击这里 好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流

    2.8K20

    由旋转画廊,看自定义RecyclerView.LayoutManager

    :提供了竖向和横向线性布局(实现ListView功能) GridLayoutManager:表格布局(实现GridView功能) StaggeredGridLayoutManager:瀑布流布局 Adapter...当dx>0时,控件向右滚动,即 接着,调用先前已经写好的布局方法layoutItems(),对Item进行重新布局。 最后,返回实际滑动的距离。...Item直接跳转 smoothScrollToPosition()用于带动画Item滑动 也很简单,计算要跳转Item的所在位置需要滚动的距离,如果不需要动画,则直接对Item进行布局,否则启动滑动动画...旋转画廊中,每个Item是有重叠部分的,因此会有Item绘制顺序的问题,如果不对Item的绘制顺序进行调整,将出现中间Item被旁边Item遮挡的问题。...因此,在这里,我们通过以上定义的LayoutManager计算了当前显示的Item的中间位置,然后对Item的绘制进行了重新排序。 最后将计算出来的顺序优先级返回给RecyclerView进行绘制

    2.8K51
    领券