2012-11-02 62 views
3

我有一个说“登录”的按钮。当用户点击它时,会弹出一个提醒用户登录信息的对话框。一旦用户输入他们的信息并点击确定,按钮将延伸到包含“欢迎,[用户名]”所需的宽度。我想要做的是将按钮宽度的变化从“登录”设置为“欢迎,[用户名]”。Android ScaleAnimation从九个补丁不能正常工作的代码

我已经做了九个补丁的按钮背景,如果我在xml文件中指定不同的宽度,它完美的工作。当我尝试将宽度变化从默认宽度设置为更长的宽度时,它只是像普通的.png而不是9.png一样延伸。

下面是我使用拉伸从一个静态的宽度到另一个代码:

<Button 
    android:id="@+id/signIn" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_vertical" 
    android:background="@drawable/button_nine_patch" 
    android:textSize="20dip" 
    android:layout_marginBottom="-2dip" /> 

而且

ScaleAnimation stretch = new ScaleAnimation(1.0f ,10.0f, 1.0f, 1.0f); 

this.signIn = (Button) this.findViewById(R.id.signIn); 
this.signIn.setOnClickListener(this); 

stretch.setDuration(2000); 
signIn.startAnimation(stretch); 

因为我不知道一个人的名字有多少封是我需要能够从代码中设置按钮的最终宽度。

我疯狂搜索了一遍,浏览了所有的android文档,但我无法找到这个问题的答案。

任何帮助将不胜感激。

+0

我有同样的问题。我试图在动画之前和之后交换9补丁。这可能不适用于你的情况,但你试过吗? – prodaea

回答

1

当Android在视图上进行动画处理时,它会为当前视图的表示而不是实际视图动画化。对视图进行动画处理需要处理视图周围的组件,并且成本会更高。虽然这通常是有益的,但在你的情况下,它会将9patch变成任何旧的位图,因此不会给你想要的结果。

我不知道有什么办法只能改变一个视图的特定区域,并有一个专门给在这里的问题:Stretch/Scale a Specific Region of View/Bitmap