繁体   English   中英

无法设置“自定义视图”的动画

[英]Can't animate Custom View

我正在创建我的textview,它用作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

您正在布置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;
                }
            });

问题是我正在实现TextView,但没有使用它。 相反,我只是在该类中创建另一个TextView,然后使用它而不是我的类。

换句话说,代码:

    TextView textView = new TextView(context);

不应该存在,只需使用this来设置setText,setTextSize,color等。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM