我想在工作的应用程序中添加一个移动的“浮动”文本。
我有一个基本布局的工作应用程序,类似于:
<LinearLayout>
<TextView />
<TextView />
</LinearLayout>
我的应用程序动态添加TextViews,所以我需要scrollview ...
我希望有一个小的指示,比如每次用户点击某处时出现“+1”,然后向上浮动(移动)并消失在屏幕顶部。 我会感谢能够提供简单方法的人。
TextView
,并将其添加到布局中吗?ObjectAnimator
并让它全部“动画”吗?我之前没有任何经验,所以我希望在尝试所有这些之前,有人可以指出最简单的路线......
我能够在特定位置创建“悬停”文本视图(尚未移动):
我为浮动文本创建了一个布局:
<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都会受到欢迎!
答案 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);
}
});