2011-11-27 124 views
0

我在自定义视图中补间动画。所以我创建了“MyView Extend视图”和 “Sprite Extend ImageView”。我在Myview中创建'Sprite'实例,并在Myview.onDraw()方法中调用sprite.onDraw() 方法。但是...补间动画不工作.... 只看到图像。帮我。我不明白。补间动画不能在自定义视图中工作

这是源代码。 活动。

public class Myview01Activity extends Activity { 
/** Called when the activity is first created. */ 
Animation MainRotate; 
Myview myview; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    MainRotate = AnimationUtils.loadAnimation(Myview01Activity.this, R.anim.rotate); 
    myview = new Myview(Myview01Activity.this); 
    setContentView(myview); 
    Log.i("TAG", "Come in"); 
}   

}

MyView的。

class Myview extends View { 
Sprite sprite; 
public Myview(Context context) { 
    super(context); 
    // TODO Auto-generated constructor stub 
    sprite = new Sprite(context); 
    Log.i("TAG", "Come in"); 
} 
@Override 
protected void onDraw(Canvas canvas) { 
    // TODO Auto-generated method stub 
    //super.onDraw(canvas); 
    sprite.onDraw(canvas); 
} 

雪碧

class Sprite extends ImageView { 
Bitmap bitmap; 
Paint paint; 
RotateAnimation rotate; 
Animation myanimation; 
AlphaAnimation blend; 
ScaleAnimation scale; 
AnimationSet spriteAnimation; 
float centerX; 
float centerY; 
float offsetX; 
float offsetY; 

public Sprite(Context context) { 
    super(context); 
    bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); 
    offsetX = bitmap.getWidth()/2; 
    offsetY = bitmap.getHeight()/2; 
    paint = new Paint(); 
    paint.setAntiAlias(true); 
    paint.setFilterBitmap(true); 
} 
@Override 
protected void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 
    if (spriteAnimation == null) { 
     centerX = canvas.getWidth()/2; 
     centerY = canvas.getHeight()/2; 
     createAnimation(canvas); 
     Log.i("TAG", "Come in"); 
    } 
    canvas.drawBitmap(bitmap, centerX - offsetX, centerY - offsetY, paint); 
} 

public void createAnimation(final Canvas canvas) { 
    rotate = new RotateAnimation(0, 360, centerX, centerY); 
    rotate.setRepeatMode(Animation.REVERSE); 
    rotate.setRepeatCount(Animation.INFINITE); 
    scale = new ScaleAnimation(0, 2, 0, 2, centerX, centerY); 
    scale.setRepeatMode(Animation.REVERSE); 
    scale.setRepeatCount(Animation.INFINITE); 
    scale.setInterpolator(new AccelerateDecelerateInterpolator()); 

    spriteAnimation = new AnimationSet(false); 
    spriteAnimation.addAnimation(rotate); 
    spriteAnimation.addAnimation(scale); 
    spriteAnimation.setDuration(3000); 
    startAnimation(spriteAnimation); 

} 
+0

为什么你创建了我的view.directly使用精灵,而且你还没有应用动画视图play.See我的答案,并尝试它。 –

回答

0

采取实例变量这样

Sprite view; 

,并在里面创建做这样的事情:

MainRotate = AnimationUtils.loadAnimation(Myview01Activity.this, R.anim.rotate); 
    view = new Sprite(this); 
    setContentView(view); 
    view.startAnimation(MainRotate); 
    Log.i("TAG", "Come in"); 

尝试it.It可能工作。

+0

是的,您的评论是正确的。但我喜欢使自定义视图,像'MyCustom视图'的背景已旋转和翻译补间动画。当我触摸屏幕时,我想要制作具有缩放和字母补间动画的“圈子”。所以我做了两个自定义视图(MyView&Sprite)。这是不可能的事情? – user1067870

+0

有人不知道这个问题吗? ,,, – user1067870

相关问题