添加“浮动”TextView

时间:2013-07-08 15:21:57

标签: android textview

我想在工作的应用程序中添加一个移动的“浮动”文本。

我有一个基本布局的工作应用程序,类似于:

<LinearLayout>
    <TextView />
    <TextView /> 
</LinearLayout>

我的应用程序动态添加TextViews,所以我需要scrollview ...

我希望有一个小的指示,比如每次用户点击某处时出现“+1”,然后向上浮动(移动)并消失在屏幕顶部。 我会感谢能够提供简单方法的人。

  • 我应该动态创建TextView,并将其添加到布局中吗?
  • 我是否需要添加与ScrollView重叠的相对布局,以便我可以相对于它移动文本?
  • 我应该尝试在我创作的画布上绘制它吗?
  • 我应该使用ObjectAnimator并让它全部“动画”吗?

我之前没有任何经验,所以我希望在尝试所有这些之前,有人可以指出最简单的路线......

更新

我能够在特定位置创建“悬停”文本视图(尚未移动):

  • 在我之前的布局中添加了根据布局的RelativeLayout。
  • 我为浮动文本创建了一个布局:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/floatingViewLinearLayout" >
      <TextView />
    </LinearLayout>
    
  • 创建了一个服装视图来处理它:

公共类FloatingText扩展了View {

private View floatingLayoutView;

public FloatingText(Context context) {
    super(context);
    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    floatingLayoutView = inflater.inflate(R.layout.floating_text, null);

    TextView tv = (TextView) floatingLayoutView
            .findViewById(R.id.flaotingViewTextView);
    tv.setText("+1");
    tv.setBackgroundColor(Color.TRANSPARENT);
    tv.setTextColor(Color.RED);
    tv.setTypeface(Typeface.MONOSPACE);
    tv.bringToFront();
 }
 public View getFloatingLayoutView() {
    return floatingLayoutView;
 }

}

请注意,我添加了一个get方法来接收视图。我确信这是一个可怕的解决方案。接下来你可以看到我是如何使用它的:

  • 在主要活动的onResume中添加此代码:

    RelativeLayout main = (RelativeLayout) findViewById(R.id.MainRelativeLayout);
    FloatingText ft = new FloatingText(this);
    final View floatingLayoutView = ft.getFloatingLayoutView();
    RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
            new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
                    LayoutParams.WRAP_CONTENT));
    lp.setMargins(140, 300, 0, 0);
    floatingLayoutView.setLayoutParams(lp);
    
    main.addView(floatingLayoutView);
    

我希望能够让FloatingText类执行addView本身,但我仍然不确定干净的方法。

接下来的挑战是以与API 8兼容的方式对其进行动画制作。似乎在API 11中添加了动画助手,在API 12中添加了一些(如amAlsoNew提到的viewproperyanimator)。

同样,任何指针和iseas都会受到欢迎!

1 个答案:

答案 0 :(得分:2)

正常翻译动画 ObjectAnimator View属性动画可用于此目的(注意:ObjectAnimator / Viewproperty animator在 android version 3 下面不可用。

假设您的视图位于屏幕的底部并且屏幕高度为512px;您可以通过(使用动画监听器)执行翻译UP动画:

view.animate().translationYBy(-512).setListener(new AnimatorListener() {

        @Override
        public void onAnimationStart(Animator animation) {


        }

        @Override
        public void onAnimationRepeat(Animator animation) {


        }

        @Override
        public void onAnimationEnd(Animator animation) {
            // after animation set visibility gone
            view.setVisibility(View.GONE);
        }

        @Override
        public void onAnimationCancel(Animator animation) {
            view.setVisibility(View.GONE);
        }
    });