最近看了一下卫星效果,觉得不错,就写了一个简单入门的上下方向的。
废话不多说,直接上代码
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private View iv_root; private View iv_robot; private View iv_voice; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initListener(); } private void initView() { iv_root = findViewById(R.id.iv_root); iv_robot = findViewById(R.id.iv_robot); iv_voice = findViewById(R.id.iv_voice); } private void initListener() { iv_root.setOnClickListener(this); iv_robot.setOnClickListener(this); iv_voice.setOnClickListener(this); } boolean isopen; @Override public void onClick(View view) { switch (view.getId()){ case R.id.iv_root: if(!isopen){ starAnim(); }else{ closeAnim(); } isopen=!isopen; break; case R.id.iv_robot: Toast.makeText(this, "我是机器人", Toast.LENGTH_SHORT).show(); break; case R.id.iv_voice: Toast.makeText(this, "我是语音", Toast.LENGTH_SHORT).show(); break; } } /** * 打开动画的操作 */ private void starAnim() { iv_voice.setVisibility(View.VISIBLE); iv_robot.setVisibility(View.VISIBLE); int y1=dip2px(50); int y2=dip2px(100); ObjectAnimator animator1=ObjectAnimator.ofFloat(iv_voice,"translationY",0,-y1); ObjectAnimator animator2=ObjectAnimator.ofFloat(iv_robot,"translationY",0,-y2); ObjectAnimator animator3=ObjectAnimator.ofFloat(iv_root,"rotation",0,45); animator1.setInterpolator(new AccelerateDecelerateInterpolator()); animator2.setInterpolator(new AccelerateDecelerateInterpolator()); AnimatorSet set=new AnimatorSet(); set.playTogether(animator1,animator2,animator3); set.setDuration(500);//设置动画时间 set.start(); } /** * 关闭动画的操作 */ private void closeAnim() { int y1=dip2px(50); int y2=dip2px(100); ObjectAnimator animator1=ObjectAnimator.ofFloat(iv_voice,"translationY",-y1,0); ObjectAnimator animator2=ObjectAnimator.ofFloat(iv_robot,"translationY",-y2,0); ObjectAnimator animator3=ObjectAnimator.ofFloat(iv_root,"rotation",45,0); animator1.setInterpolator(new AccelerateDecelerateInterpolator()); animator2.setInterpolator(new AccelerateDecelerateInterpolator()); AnimatorSet set=new AnimatorSet(); set.playTogether(animator1,animator2,animator3); set.setDuration(500);//设置动画时间 set.start(); set.addListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animator) { } @Override public void onAnimationEnd(Animator animator) { iv_voice.setVisibility(View.GONE); iv_robot.setVisibility(View.GONE); } @Override public void onAnimationCancel(Animator animator) { } @Override public void onAnimationRepeat(Animator animator) { } }); } /** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) */ public int dip2px(float dpValue) { final float scale =getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f); } }布局文件
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="count.buma.com.textdemo.MainActivity"> <ImageView android:id="@+id/iv_robot" android:layout_width="40dp" android:layout_height="40dp" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:visibility="gone" android:src="@mipmap/robot" /> <ImageView android:id="@+id/iv_voice" android:layout_width="40dp" android:layout_height="40dp" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:visibility="gone" android:src="@mipmap/voice" /> <ImageView android:id="@+id/iv_root" android:layout_width="40dp" android:layout_height="40dp" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:src="@mipmap/add" /> </RelativeLayout>