我有12个ImageButton使用AbsoluteLayout设置在3x4的网格中。当用户点击图像按钮时,它会扩大到填充屏幕,保持一段时间,然后缩小回原来的位置。
动画效果是实现了的,但是在按钮缩小时有时会留下线条(如下面所示)。
是否有更好的方法实现这种动画效果?我该怎么做才能避免出现绘制错误?
编辑: 同时,这些线条会在缩小动画完成后消失,只在动画期间存在。
以下是我的更新后的动画代码:
这里是CardButton类,它本质上是一个带有几个成员变量的ImageButton。
动画效果是实现了的,但是在按钮缩小时有时会留下线条(如下面所示)。
是否有更好的方法实现这种动画效果?我该怎么做才能避免出现绘制错误?
编辑: 同时,这些线条会在缩小动画完成后消失,只在动画期间存在。
以下是我的更新后的动画代码:
private void animateCard(final CardButton c){
this.isAnimating = true;
CardPickerActivity.this.soundManager.playSound(c.name);
Util.logD("Card:" + c.name + " clicked!");
final int growDuration = 750;
final int holdDuration = 500;
final int shrinkDuration = 500;
c.bringToFront();
AnimationSet asGrow = new AnimationSet(true);
float newScale = 2.0f;
float newX = (CardPickerActivity.this.wDesk/2.0f - CardPickerActivity.this.cardSize/2.0f*newScale - c.getLeft())/newScale;
float newY = (CardPickerActivity.this.hDesk/2.0f - CardPickerActivity.this.cardSize/2.0f*newScale - c.getTop() )/newScale;
TranslateAnimation taG = new TranslateAnimation(0.0f, newX , 0.0f, newY);
ScaleAnimation saG = new ScaleAnimation( 1.0f, newScale, 1.0f, newScale);
taG.setRepeatCount(1);
saG.setRepeatCount(1);
taG.setRepeatMode(Animation.REVERSE);
saG.setRepeatMode(Animation.REVERSE);
asGrow.addAnimation(taG);
asGrow.addAnimation(saG);
asGrow.setDuration(growDuration);
c.startAnimation(asGrow);
}
这是活动的XML布局,忽略我稍后根据设备屏幕设置的layout_x和layout_y:
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/cardLayout" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<com.myProject.CardButton
android:id="@+id/btn1" android:text="1" android:layout_x="0px"
android:layout_y="0px" android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.myProject.CardButton
android:id="@+id/btn2" android:text="2" android:layout_x="10px"
android:layout_y="10px" android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.myProject.CardButton
android:id="@+id/btn3" android:text="3" android:layout_x="20px"
android:layout_y="20px" android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.myProject.CardButton
android:id="@+id/btn4" android:text="4" android:layout_x="30px"
android:layout_y="30px" android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.myProject.CardButton
android:id="@+id/btn5" android:text="5" android:layout_x="40px"
android:layout_y="40px" android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.myProject.CardButton
android:id="@+id/btn6" android:text="6" android:layout_x="40px"
android:layout_y="40px" android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.myProject.CardButton
android:id="@+id/btn7" android:text="7" android:layout_x="40px"
android:layout_y="40px" android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.myProject.CardButton
android:id="@+id/btn8" android:text="8" android:layout_x="40px"
android:layout_y="40px" android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.myProject.CardButton
android:id="@+id/btn9" android:text="9" android:layout_x="40px"
android:layout_y="40px" android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.myProject.CardButton
android:id="@+id/btn10" android:text="10" android:layout_x="40px"
android:layout_y="40px" android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.myProject.CardButton
android:id="@+id/btn11" android:text="11" android:layout_x="40px"
android:layout_y="40px" android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<com.myProject.CardButton
android:id="@+id/btn12" android:text="12" android:layout_x="40px"
android:layout_y="40px" android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</AbsoluteLayout>
这里是CardButton类,它本质上是一个带有几个成员变量的ImageButton。
public class CardButton extends ImageButton {
public CardButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public CardButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CardButton(Context context) {
super(context);
}
public String name;
public Bitmap image;
public int soundRes;
public int imageRes;
public String customImagePath;
public String customSoundPath;
}