无法为自定义视图设置动画

时间:2015-05-13 17:38:20

标签: android android-animation

我正在创建我的文本视图,它在我的MainActivity文件中用作标题,一切正常,直到我认为我最好将代码移动到另一个类。 虽然它可以工作并显示文本但是当我尝试动画时它不起作用。 我使用的代码是在init()方法中。

代码很简单,我在这里粘贴它:

public class TextViewHeader extends TextView {
private static final String TAG = "TextViewHeader".toUpperCase();

private Context context;
private FrameLayout frameLayoutWhiteTowerContainer;

private String text;
private int whiteTowerContainerHeight;
private int tower_height;

public TextViewHeader(Context context) {
    super(context);
}

public TextViewHeader(Context context, String text, FrameLayout frameLayoutWhiteTowerContainer,
                      int whiteTowerContainerHeight, int tower_height) {
    super(context);
    this.context = context;
    this.text = text;
    this.frameLayoutWhiteTowerContainer = frameLayoutWhiteTowerContainer;
    this.whiteTowerContainerHeight = whiteTowerContainerHeight;
    this.tower_height = tower_height;
    init();
}

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


private void init() {
    TextView textView = new TextView(context);
    textView.setText(text);
    textView.setTextSize(25);
    textView.setTextColor(Color.parseColor("#FF545454"));
    Typeface typefaceCondensed = Typeface.create("sans-serif-condensed", Typeface.BOLD);
    textView.setTypeface(typefaceCondensed);
    FrameLayout.LayoutParams tv_header_params = new FrameLayout.LayoutParams(
            FrameLayout.LayoutParams.WRAP_CONTENT, FrameLayout.LayoutParams.WRAP_CONTENT);
    int topMargin = whiteTowerContainerHeight / 2 - tower_height / 2 - 100;
    tv_header_params.topMargin = topMargin;
    tv_header_params.gravity = Gravity.CENTER_HORIZONTAL;
    textView.setLayoutParams(tv_header_params);

    frameLayoutWhiteTowerContainer.addView(textView, tv_header_params);
}


}

MainActivity中的代码是:

                tvHeader =  new TextViewHeader(MainActivity.this, "TOWER", flWhiteTowerContainer,
                    whiteTowerContainerHeight, tower_height ); // create inside onCreate method  
                    tvHeader.animate().y(515).setDuration(1500).start(); //and the animation happens later onMapReady

2 个答案:

答案 0 :(得分:0)

在TextViewHeader布局之前,您正在开始动画。

尝试:

tvHeader = new TextViewHeader(MainActivity.this, "TOWER", flWhiteTowerContainer,
                    whiteTowerContainerHeight, tower_height );    
tvHeader.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
                @Override
                public boolean onPreDraw() {
                    // Layout complete but not drawn yet
                    tvHeader.getViewTreeObserver().removeOnPreDrawListener(this);
                    tvHeader.animate().y(515).setDuration(1500).start();
                    return false;
                }
            });

答案 1 :(得分:0)

问题在于我实现了TextView但我没有使用它。相反,我只是在课堂上创建另一个TextView,而不是我的班级。

换句话说代码:

    TextView textView = new TextView(context);

不应该存在,只需使用this来设置文本,setTextSize,颜色等。

    this.setText(text);
    this.setTextSize(25);
    this.setTextColor(Color.parseColor("#FF545454"));