动画类在另一个类中调用

时间:2011-04-03 22:59:39

标签: android animation

我正在为Android创建一个桌面游戏,我想在特定的动作事件发生时做一个动画。

我有一个Boardview类,它使用位图绘制一个surfaceview,这向用户显示了该板。

当运动事件发生时,此代码执行

public boolean onTouchEvent(MotionEvent event) {

    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        Intent animate = new Intent(Tempboardview.this, Moving.class);
        animate.putExtra("xOld", oldStones.get(i).getx());
        animate.putExtra("yOld", oldStones.get(i).gety());
        animate.putExtra("xNew", newStones.get(i).getx());
        animate.putExtra("yNew", newStones.get(i).gety());
        animate.putExtra("color", 0);
        startActivity(animate);
    }
}

其中newStones和oldStones只是ArrayList对象,gety()和getx()返回双精度。

这是我的移动课

public class Moving extends Activity {

    private static final String TAG = "Animation";
    double xOld = 0, yOld = 0, xNew = 0, yNew = 0, color = 0;

    /** Called when the activity is first created. */@Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);

        LayoutInflater inflater = getLayoutInflater();
        addContentView(inflater.inflate(R.layout.move, null),
            new ViewGroup.LayoutParams(800, 480));

        final ImageView image = (ImageView) findViewById(R.id.stoneimager);
        image.setVisibility(View.GONE);
        image.bringToFront();
        Bundle extras = getIntent().getExtras();

        if (extras != null) {
            xOld = extras.getDouble("xOld");
            yOld = extras.getDouble("yOld");
            xNew = extras.getDouble("xNew");
            yNew = extras.getDouble("yNew");
            color = extras.getDouble("color");
        }


        Animation animate = new TranslateAnimation((float) xOld, (float) xNew, (float) yOld, (float) yNew);
        animate.setDuration(1000);
        animate.setStartOffset(0);
        animate.setInterpolator(new LinearInterpolator());
        animate.setRepeatCount(0);
        animate.setFillAfter(true);
        animate.setZAdjustment(Animation.ZORDER_TOP);
        Animation.AnimationListener listener = new Animation.AnimationListener() {

            @Override
            public void onAnimationStart(Animation animation) {
                Log.d("boardtag", "animation started");
                image.setVisibility(View.VISIBLE);
                image.bringToFront();
            }

            @Override
            public void onAnimationRepeat(Animation animation) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onAnimationEnd(Animation animation) {
                // TODO Auto-generated method stub
                image.setVisibility(View.GONE);
                finish();
            }
        };
        animate.setAnimationListener(listener);
        Log.d("boardtag", "animation started");
        image.startAnimation(animate);

    }
}

问题是当电路板仍然显示时无法进行动画。 我使用了android清单来改变.Moving到Transparent的主题,但这不起作用。

任何建议都将受到赞赏。

1 个答案:

答案 0 :(得分:1)

这可能会比我想要的更严厉,但我认为你完全滥用了Intent / Activity功能。您需要认真考虑重新设计UI层,使其与活动的Activity更紧密地结合在一起。

由于运动事件很常见且活动创建和意图调度相对昂贵(相对而言),因此上面的内容应该非常缓慢。你需要的是一个主要的“游戏”活动,它与SurfaceView紧密结合(可能是OpenGL,因为它有动画,它是一个游戏)。此活动将接受用户输入(UI事件)并将其直接转换为表面视图的绘图命令。