Android开发之旅一简单的Animator动画使用
2014-07-25 14:53
387 查看
对于Path的菜单效果看着很不错,今天就使用动画做个没有幅度的试试?
练练手重写RelativeLayout
看主布局
MainActivity
重写的layout
看看效果
练练手重写RelativeLayout
看主布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <com.example.testpath.TestLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/layout" ></com.example.testpath.TestLayout> </RelativeLayout>
MainActivity
package com.example.testpath; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TestLayout layout=(TestLayout) findViewById(R.id.layout); List<Integer> imgRes=new ArrayList<Integer>(); imgRes.add(R.drawable.composer_music); imgRes.add(R.drawable.composer_music); imgRes.add(R.drawable.composer_music); imgRes.add(R.drawable.composer_music); imgRes.add(R.drawable.composer_music); layout.init(R.drawable.composer_music, imgRes, TestLayout.LEFT_BOTTOM); layout.setOnPKButClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub System.out.println("----getId-----"+v.getId()); } }); /* layout.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent event) { // TODO Auto-generated method stub switch (event.getAction()) { case MotionEvent.ACTION_DOWN: System.out.println("----dd------"); return false; case MotionEvent.ACTION_MOVE: System.out.println("----mm------"); return false; case MotionEvent.ACTION_UP: System.out.println("----uu------"); return false; } return false; } });*/ } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
重写的layout
package com.example.testpath; import java.util.ArrayList; import java.util.List; import android.animation.Animator; import android.animation.Animator.AnimatorListener; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.view.animation.Animation; import android.view.animation.Animation.AnimationListener; import android.view.animation.AnimationUtils; import android.view.animation.BounceInterpolator; import android.widget.ImageView; import android.widget.RelativeLayout; public class TestLayout extends RelativeLayout{ private Context mContext; public static int LEFT_BOTTOM=1,RIGHT_BOTTOM=2; private ImageView mainButton;// 主按鈕 //存放有多少个子按钮 private List<ImageView> listImg=new ArrayList<ImageView>(); private boolean isShow=false; //子按钮点击动画 private Animation childAnim; public TestLayout(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); // TODO Auto-generated constructor stub mContext=context; } public TestLayout(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub mContext=context; } public TestLayout(Context context) { super(context); // TODO Auto-generated constructor stub mContext=context; } /** * * @param imgRes * @param place */ public void init(int resMain,List<Integer> imgRes,int place){ int align1 = 1,align2 = 2; if(place == LEFT_BOTTOM){ align1 = ALIGN_PARENT_LEFT; align2 = ALIGN_PARENT_BOTTOM; }else if(place == RIGHT_BOTTOM){ align1 = ALIGN_PARENT_RIGHT; align2 = ALIGN_PARENT_BOTTOM; } //子按钮layout RelativeLayout layout = new RelativeLayout(mContext); //childLayout设置参数 LayoutParams rlps1 = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); rlps1.alignWithParent = true; layout.setLayoutParams(rlps1); listImg.clear(); //创建子按钮 for(int i=0;i<imgRes.size();i++){ ImageView img = new ImageView(mContext);// 子按扭圖片 LayoutParams rlps=new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); rlps.alignWithParent = true; rlps.addRule(align1, RelativeLayout.TRUE); rlps.addRule(align2, RelativeLayout.TRUE); img.setLayoutParams(rlps); img.setImageResource(imgRes.get(i)); img.setId(i); img.setVisibility(View.INVISIBLE); // 此处为INVISIBLE,view才会有宽度 layout.addView(img); listImg.add(img); } // 主按扭 mainButton = new ImageView(mContext); mainButton.setImageResource(resMain); LayoutParams crosslps = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT); crosslps.alignWithParent = true; crosslps.addRule(align1, RelativeLayout.TRUE); crosslps.addRule(align2, RelativeLayout.TRUE); mainButton.setLayoutParams(crosslps); layout.addView(mainButton); //把布局添加进去 this.addView(layout); childAnim=AnimationUtils.loadAnimation(mContext, R.anim.pk_sdk_view_bar_item); childAnim.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation arg0) { // TODO Auto-generated method stub } @Override public void onAnimationRepeat(Animation arg0) { // TODO Auto-generated method stub } @Override public void onAnimationEnd(Animation arg0) { // TODO Auto-generated method stub startAnimationsOut(500); } }); mainButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { // TODO Auto-generated method stub if(true == isShow){ isShow=false; startAnimationsOut(500); }else{ isShow=true; startAnimationsIn(500); } } }); } /** * 子按钮展开动画 * @param duration */ public void startAnimationsIn(int duration) { int x=0,y=0; for(int i=0;i<listImg.size();i++){ ImageView img=listImg.get(i); img.setVisibility(View.VISIBLE); x = 0; y +=img.getWidth(); /*Animation a=new TranslateAnimation(0, x, 0, y); a.setInterpolator(new BounceInterpolator()); a.setDuration(duration); a.setFillAfter(true); img.startAnimation(a);*/ AnimatorSet set = new AnimatorSet() ; set.setDuration(duration); // set.setInterpolator(new BounceInterpolator()); Animator animX = ObjectAnimator.ofFloat(img, "translationX", 0,x); Animator animY = ObjectAnimator.ofFloat(img, "translationY", 0,-y); animX.setInterpolator(new BounceInterpolator()); animY.setInterpolator(new BounceInterpolator()); List<Animator> l=new ArrayList<Animator>(); l.add(animX); l.add(animY); set.playTogether(l); set.start(); } } /** * 子按钮收缩动画 * @param duration */ public void startAnimationsOut(int duration) { int x=0,y=0; for(int i=0;i<listImg.size();i++){ final ImageView img=listImg.get(i); // img.setVisibility(View.INVISIBLE); x = 0; y +=img.getWidth(); /*Animation a=new TranslateAnimation(x, 0, y, 0); a.setDuration(duration); a.setFillAfter(true); img.startAnimation(a);*/ AnimatorSet set = new AnimatorSet() ; set.setDuration(duration); Animator animX = ObjectAnimator.ofFloat(img, "translationX", x,0); Animator animY = ObjectAnimator.ofFloat(img, "translationY", -y,0); List<Animator> l=new ArrayList<Animator>(); l.add(animX); l.add(animY); set.playTogether(l); set.start(); set.addListener(new AnimatorListener() { @Override public void onAnimationStart(Animator arg0) { // TODO Auto-generated method stub } @Override public void onAnimationRepeat(Animator arg0) { // TODO Auto-generated method stub } @Override public void onAnimationEnd(Animator arg0) { // TODO Auto-generated method stub img.setVisibility(View.INVISIBLE); } @Override public void onAnimationCancel(Animator arg0) { // TODO Auto-generated method stub } }); } } /** * 子按钮点击事件动画(会移动view) * @param view * @param duration */ public void startChildAnim(View view,int duration){ AnimatorSet set = new AnimatorSet() ; Animator scaleX = ObjectAnimator .ofFloat(view, "scaleX", 2f); Animator scaleY = ObjectAnimator .ofFloat(view, "scaleY", 2f); Animator alpha = ObjectAnimator.ofFloat(view, "alpha", 1f, 0.2f); List<Animator> l=new ArrayList<Animator>(); l.add(scaleX); l.add(scaleY); l.add(alpha); set.setDuration(duration); set.playTogether(l); set.start(); set.addListener(new AnimatorListener() { @Override public void onAnimationStart(Animator arg0) { // TODO Auto-generated method stub } @Override public void onAnimationRepeat(Animator arg0) { // TODO Auto-generated method stub } @Override public void onAnimationEnd(Animator arg0) { // TODO Auto-generated method stub startAnimationsOut(500); } @Override public void onAnimationCancel(Animator arg0) { // TODO Auto-generated method stub } }); } /** * 设置子按钮click事件 */ public void setOnPKButClickListener(final OnClickListener l) { if (listImg != null && listImg.size() > 0) { for (int i = 0; i < listImg.size(); i++) { if (listImg.get(i) != null){ listImg.get(i).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub System.out.println("------点击了------"); // startChildAnim(v, 500); v.startAnimation(childAnim); l.onClick(v); } }); } } } } }
看看效果
相关文章推荐
- 【Android游戏开发二十一】Android os设备谎言分辨率的解决方案!以及简单阐述游戏引擎如何使用!
- 【Android游戏开发二十一】Android os设备谎言分辨率的解决方案!以及简单阐述游戏引擎如何使用!
- Android动画:AnimationDrawable资源的简单使用
- android开发之 蓝牙使用(一)简单操作
- Android开发中SQLite的简单使用方法
- 【Android游戏开发二十一】Android os设备谎言分辨率的解决方案!以及简单阐述游戏引擎如何使用!
- android游戏开发框架libgdx的使用(二十三)—使用Universal Tween Engine实现动画效果
- 【Android LibGDX游戏引擎开发教程】第09期:动画类的使用
- Android系统开发中log的使用方法及简单的原理
- 【按住你的心】——Android开发CheckBox&RadioButton控件的简单使用
- Android游戏开发之使用AnimationDrable实现Frame动画(三十一)
- 【Android游戏开发二十一】Android os设备谎言分辨率的解决方案!以及简单阐述游戏引擎如何使用
- Android开发之--(WIFI,蓝牙,电池,背光,SD卡,摄像头,按键,MIC,重力感应等)功能的简单使用
- 【Android游戏开发二十一】Android os设备谎言分辨率的解决方案!以及简单阐述游戏引擎如何使用!
- 【Android游戏开发二十一】Android os设备谎言分辨率的解决方案!以及简单阐述游戏引擎如何使用!
- Android游戏开发之使用AnimationDrable实现Frame动画(三十一)
- Android开发之--(WIFI,蓝牙,电池,背光,SD卡,摄像头,按键,MIC,重力感应等)功能的简单使用
- 【按住你的心】——Android开发Button控件的简单使用
- 【android动画开源库】使用ObjectAnimator后按钮等无法交互问题
- Android开发中SQLite的简单使用方法