我想把一個縮放動畫應用到一個矩形,使用的代碼不是xml。我想讓矩形變長,非常簡單。爲什麼在Android中應用ScaleAnimation時,drawable的位置也會發生變化?
RectDrawableView - 創建RectShape ShapeDrawable
public class RectDrawableView extends View {
Paint paint;
public RectDrawableView(Context context) {
super(context);
paint = new Paint();
paint.setColor(Color.parseColor("#aacfcce4"));
paint.setStyle(Paint.Style.FILL);
}
protected void onDraw(Canvas canvas) {
int x = 35;
int y = 250;
int width = 50;
int height = 300;
ShapeDrawable shapeDrawable = new ShapeDrawable(new RectShape());
Rect rect = new Rect(x, y, x+width, y+height);
shapeDrawable.setBounds(rect);
shapeDrawable.getPaint().set(paint);
shapeDrawable.draw(canvas);
}
}
活動: - 創建一個新RectDrawableView並增加了佈局。 OnResume會觸發一個動畫,這會使矩形變長。
public class RectActivity extends Activity {
final String TAG = "RectActivity";
TextView rect1;
RectDrawableView rectView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.basic);
LinearLayout linear = (LinearLayout) findViewById(R.id.basicLayout);
rectView = new RectDrawableView(this);
linear.addView(rectView);
}
@Override
public void onResume() {
super.onResume();
RunAnimations();
}
private void RunAnimations() {
Animation rectAnim1 = new ScaleAnimation(1, 1, 1, 1.3f, ScaleAnimation.RELATIVE_TO_SELF, 0,
ScaleAnimation.RELATIVE_TO_SELF, 1);
rectAnim1.setFillBefore(false);
rectAnim1.setFillAfter(true);
rectAnim1.setStartOffset(500);
rectAnim1.setDuration(500);
rectView.startAnimation(rectAnim1);
}
}
basic.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/basicLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
</LinearLayout>
結果:矩形是長高,好,但矩形的位置也在不斷變化,不好。整個矩形位於屏幕的上方。
當我使用完全相同的動畫代碼,但將其應用於TextView而不是ShapeDrawable時,一切都很好。
我已經瀏覽了所有關於SO的相關文章,但我仍然在爲這一篇而努力。任何幫助將不勝感激,謝謝。
嘗試使用上面的代碼,其工作原理ics –
感謝Rajdeep - 第一次正確回答,然後跟進了一個好的工作示例。 – electricSunny