- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将缩放动画应用到矩形,使用代码而不是 xml。我想让矩形变高,很简单。
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);
}
Activity :- 创建一个新的 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);
}
}
基本.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 的相关文章,但我仍在为这篇文章而苦苦挣扎。任何帮助将不胜感激,谢谢。
最佳答案
完整的代码,我改变了矩形的高度。
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.rectangle);
rectView = new RectDrawableView(this);
linear.addView(rectView);
Button sbutton = (Button)findViewById(R.id.sbutton);
sbutton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
RectActivity.this.RunAnimations();
}
});
Button tbutton = (Button)findViewById(R.id.tbutton);
tbutton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
RectActivity.this.runTranslateAnimation();
}
});
}
@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.ABSOLUTE, 250);
rectAnim1.setFillBefore(false);
rectAnim1.setFillAfter(true);
rectAnim1.setStartOffset(500);
rectAnim1.setDuration(500);
rectView.startAnimation(rectAnim1);
}
private void runTranslateAnimation() {
float x = rectView.getX();
float y = rectView.getY();
TranslateAnimation trans = new TranslateAnimation(0, 0, 0, (90));
trans.setFillAfter(true);
trans.setStartOffset(500);
trans.setDuration(500);
rectView.startAnimation(trans);
}
}
public class RectDrawableView extends View {
Paint paint;
Rect rect;
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 = 50;
int y = 150;
int width = 50;
int height = 100;
ShapeDrawable shapeDrawable = new ShapeDrawable(new RectShape());
rect = new Rect(x, y, x+width, y+height);
shapeDrawable.setBounds(rect);
shapeDrawable.getPaint().set(paint);
shapeDrawable.draw(canvas);
}
}
关于android - 为什么在 Android 中应用 ScaleAnimation 时 drawable 的位置也会发生变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8305147/
我正在使用 ScaleAnimation。我想将我的商品尺寸扩大一倍,这很简单: ScaleAnimation setSizeForTop = new ScaleAnimation(1, 2, 1,
所以下面的动画按预期工作: Animation scaleUp = new ScaleAnimation(0, 1, 0, 1, Animation.RELATIVE_TO_SELF, 0.5f, A
我的自定义 ScaleAnimation 似乎忽略了它的枢轴点。这是我的 super 电话: super(1.0f, widthFactor, 1.0f, heightFactor, pivotX,
我的布局结构如下: LinearLayout1 LinearLayout2 EditText 我正在使用 LayoutAnimationController 将 ScaleAnimation 应用于
这是我的自定义 ScaleAnimation: public class MyScaler extends ScaleAnimation { private static final Stri
关闭。我是自己用Timer做的,在看了书之后重写了draw方法。 最佳答案 不要调用 animation.startAnimation(animation)。只需调用 startAnimation(a
我想要垂直缩放 ImageView,等待,然后在同一个 ImageView 上执行另一个缩放。我简化了下面的代码,但这本质上是我想要做的: ScaleAnimation animate = new S
我有一个自定义 View ,我在其中实现了 onDraw,它成功地绘制了背景以及右上角的小叠加图像。我通过以下操作手动为覆盖图像(带有 ScaleAnimation 和 Rotate Animatio
我有一个问题: 我在我的项目中实现了拖放功能,其中一些图标模拟了 android 2.2 的拖放操作。 因此,当您单击图标一秒钟时,您可以开始移动手指并将图标插入屏幕的任何部分。 android 2.
我在 ImageView 中一个接一个地应用三个动画。我为每个动画都有一个 AnimationListener,所以在 onAnimationEnd 中,我开始下一个,所以它们不会重叠。动画是这样的:
我们正在使用 TouchImageView 并希望实现 onDoubleTap 缩放 ...到目前为止一切顺利。 问题是: 如果我们应用缩放动画并设置setFillAfter(false),在Anim
我正在尝试使用 ScaleAnimation 从 View 的中心向右和向左缩放 View 。无论我为 pivotX 和 PivotY 设置什么值,它总是以相同的方式缩放(就像右边缘似乎在缩放保持左边
我有一个显示“登录”的按钮。当用户点击它时,它会弹出一个警告对话框,其中包含用户登录信息。一旦用户输入他们的信息并点击确定,按钮就会拉伸(stretch)到包含“欢迎,[用户名]”所需的宽度。我想要做
我正在尝试将缩放动画应用到矩形,使用代码而不是 xml。我想让矩形变高,很简单。 RectDrawableView - 创建一个 RectShape ShapeDrawable public clas
这听起来可能很愚蠢,但我无法在任何地方找到如何指定 ScaleTAnimation 的 pivotXType 和 pivotYType。 我知道如何以编程方式进行,但我需要通过 XML 指定它(我需要
我是一名优秀的程序员,十分优秀!