2

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

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

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

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

我想要一个小的指示,比如每次用户点击某个地方时都会出现一个“+1”,然后向上浮动(移动)并在屏幕顶​​部消失。我会感谢任何可以提供简单方法的人。

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

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

更新:

我能够在特定位置创建一个“悬停”文本视图(还没有移动):

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

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

公共类 FloatingText 扩展视图 {

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)。

同样,任何指针和问题都将受到欢迎!

4

1 回答 1

2

Normal Translate AnimationObjectAnimatorViewproperty animator可用于此目的(注意:ObjectAnimator /Viewproperty animator 在android 版本 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);
        }
    });
于 2013-07-08T17:15:59.430 回答