Android中一组TranslateAnimation中的持续时间问题
我必须按照(x,y)从一个点到另一个点,然后再从该点到另一个点,依此类推。我有大约300分。为此,我使用以下代码Android中一组TranslateAnimation中的持续时间问题,android,animation,duration,Android,Animation,Duration,我必须按照(x,y)从一个点到另一个点,然后再从该点到另一个点,依此类推。我有大约300分。为此,我使用以下代码 /** code starts **/ public class CircleAnimation extends Activity implements OnPreparedListener { /** Called when the activity is first created. */ ImageView imv1; int totalAnimTime =
/** code starts **/
public class CircleAnimation extends Activity implements OnPreparedListener {
/** Called when the activity is first created. */
ImageView imv1;
int totalAnimTime = 0;
double[][] points = {{258.8505,143.2875,67},
{259.642, 143.3665,120},
{260.429, 142.992,240},
{259.257, 139.3575,180},
......................
......................
{255.1335,146.8135,67},
{255.1395,146.794,67},
{255.0635,146.7785,67},
{254.9045,146.797,1200}
};
int j=0;
double loc[] = new double[2];
double x1 = 0,y1 = 0,x2 = 0,y2 = 0,anim_end=0, xstart=258.8505, ystart=143.2875, xnow, ynow;
protected boolean _active = true;
protected int _animTime = 66;
int k=1;
double xFactor = 1.779167, yFactor = 1.5;
private int displayWidth, displayHeight;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
imv1 = (ImageView)findViewById(R.id.imv1);
try{
LaunchInAnimation();
}catch(Exception e){
e.printStackTrace();
}
}
class LocalAnimationListener implements AnimationListener {
public void onAnimationEnd(Animation animation){
imv1.post(mLaunchSecondAnimation);
k = k ++;
}
public void onAnimationRepeat(Animation animation)
{
}
public void onAnimationStart(Animation animation)
{
}
};
private Runnable mLaunchSecondAnimation = new Runnable(){
public void run(){
LaunchInAnimation();
}
};
LocalAnimationListener MyAnimationListener = new LocalAnimationListener();
public void LaunchInAnimation() {
//animation
if(k<points.length) {
if(k==0) {
x1 = xstart;
y1 = ystart;
anim_end=1;
} else {
x1 = points[k-1][0];
y1 = points[k-1][1];
}
x2 = points[k][0];
y2 = points[k][1];
_animTime = (int) (points[k][2]);
TranslateAnimation translateAnimation = new TranslateAnimation((float)x1, (float)x2, (float)y1, (float)y2);
translateAnimation.setDuration(_animTime);
translateAnimation.setFillBefore(true);
translateAnimation.setFillAfter(true);
translateAnimation.setAnimationListener(MyAnimationListener);
imv1.startAnimation(translateAnimation);
totalAnimTime += _animTime;
}
}
}
/** code ends **/
/**代码开始**/
公共类CircleAnimation扩展了PreparedListener上的活动实现{
/**在首次创建活动时调用*/
ImageView imv1;
整数时间=0;
双[]点={{258.8505143.2875,67},
{259.642, 143.3665,120},
{260.429, 142.992,240},
{259.257, 139.3575,180},
......................
......................
{255.1335,146.8135,67},
{255.1395,146.794,67},
{255.0635,146.7785,67},
{254.9045,146.797,1200}
};
int j=0;
双loc[]=新双[2];
双x1=0,y1=0,x2=0,y2=0,动画结束=0,xstart=258.8505,ystart=143.2875,xnow,ynow;
受保护布尔值_active=true;
受保护的整数时间=66;
int k=1;
双xFactor=1.779167,yFactor=1.5;
私有int显示宽度、显示高度;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
imv1=(ImageView)findViewById(R.id.imv1);
试一试{
启动通气();
}捕获(例外e){
e、 printStackTrace();
}
}
类LocalAnimationListener实现AnimationListener{
onAnimationEnd上的公共无效(动画){
imv1.post(mLaunchSecondAnimation);
k=k++;
}
onAnimationRepeat上的公共无效(动画)
{
}
onAnimationStart上的公共无效(动画)
{
}
};
private Runnable mLaunchSecondAnimation=new Runnable(){
公开募捐{
启动通气();
}
};
LocalAnimationListener MyAnimationListener=新建LocalAnimationListener();
公共空间启动融资(){
//动画
如果(k我自己也在处理性能上的差异,然后我切换到OpenGL来进行所有渲染,并且发现一旦你理解了你在做什么,一切都会变得更加平滑和简单
- 如果您觉得OpenGL/SurfaceView对于您所要求的内容来说有点过于密集,请尝试使用Canvas
使用其中一个应该更容易,因为它们在不同的设备之间更稳定。XML动画只是诱使你认为它们是动画,它们的实际X/Y永远不会真正改变。如果我是正确的,它们必须在绘制之前从原始X/Y“闪烁”到“下一步X/Y”