您的位置:首页 > 移动开发 > Android开发

Android开发之旅一简单的Animator动画使用

2014-07-25 14:53 387 查看
对于Path的菜单效果看着很不错,今天就使用动画做个没有幅度的试试?

练练手重写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);
}
});
}
}
}
}

}


看看效果



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐