android猜歌王工程实现解析-让唱片转起来

先做说明:此博文是本人看了幕课网的视频之后进行的总结:

实现猜歌游戏,首先先做好界面:

1:整个PanLayout布局的xml文件如下:



界面显示图如下:



以上布局文件:总体用了linearlayout布局,然后上面的标题用了framelayot布局,先是ImageView,然后让TextView显示在他的上面

下面也是使用frameLayou的布局,先是唱片ImageVIew在下层,然后是ImageButton点击按钮在上层,然后是右侧的拨杆ImageView,组成了主界面

2:MainActivity的代码逻辑:







解释上面的代码逻辑:

protected void onCreate(Bundle savedInstanceState) {
        //set fullscreen
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化一些控件
        initView();
    }

上面的代码主要是进行标题栏的不显示和设置全屏

initView()函数中的方法解释:

主要是对界面中用到的控件的初始化
    ViewPan=(ImageView)findViewById(R.id.imageview1);
    ViewPanBar=(ImageView)findViewById(R.id.imageview2);

设置唱片按钮的点击事件
    btnPlayStart=(ImageButton)findViewById(R.id.btn_play_start);
    //唱片按钮的点击事件
    btnPlayStart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
        handlePlayButton();
        }
    });

    //处理唱片按钮的点击事件
    private void handlePlayButton()
    {
//首先
// 拨杆向左转动 盘片开始旋转
if(ViewPanBar!=null)
{
    if(!isRunning)
    {
        isRunning=true;
        ViewPanBar.startAnimation(BarInAnim);
       btnPlayStart.setVisibility(View.INVISIBLE);
        //播放音乐
    }
}
    }

首先判断ViewPanBar是否为空,如果是的,就进行初始化,然后判断唱片是否旋转结束,如果是的isRunning=false,就设置isRunning=true标志唱片旋转开始,然后拨杆开始向左转动,播放拨杆向左转动的动画逻辑

拨杆向左转动标志唱片旋转的开始,然后在下面的动画监听器里面,如果检测到拨杆向左转动的动画结束,则开始播放唱片进行旋转的动画。然后在唱片旋转的动画结束后,开始播放拨杆向右转动的动画。

    //盘片动画逻辑
    PanAnim= AnimationUtils.loadAnimation(this,R.anim.rotatepan);
    PanLin=new LinearInterpolator();
    PanAnim.setInterpolator(PanLin);
    PanAnim.setAnimationListener(new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {


        }


        @Override
        public void onAnimationEnd(Animation animation) {
            ViewPanBar.startAnimation(BarOutAnim);


        }


        @Override
        public void onAnimationRepeat(Animation animation) {
        }
    });
    //拨杆开始向左转动的逻辑
    BarInAnim=AnimationUtils.loadAnimation(this,R.anim.rotate_45);
    BarInLin=new LinearInterpolator();
    BarInAnim.setFillAfter(true);
    BarInAnim.setInterpolator(BarInLin);
    BarInAnim.setAnimationListener(new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {


        }


        @Override
        public void onAnimationEnd(Animation animation) {
            ViewPan.startAnimation(PanAnim);


        }


        @Override
        public void onAnimationRepeat(Animation animation) {
        }
    });
    //拨杆在唱片结束旋转后向右转动的逻辑
    BarOutAnim=AnimationUtils.loadAnimation(this,R.anim.rotate_d_45);
    BarOutLin=new LinearInterpolator();
    BarOutAnim.setFillAfter(true);
    BarOutAnim.setInterpolator(BarOutLin);
    BarOutAnim.setAnimationListener(new Animation.AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {


        }


        @Override
        public void onAnimationEnd(Animation animation) {
            isRunning=false;
            btnPlayStart.setVisibility(View.VISIBLE);
        }


        @Override
        public void onAnimationRepeat(Animation animation) {


        }
    });


}

三个rotate的xml代码如下:















阅读更多
文章标签: android
个人分类: android知识总结
上一篇使用php作为桥梁让android客户端和mysql数据库进行通信
下一篇android简单实现从网络下载文件到手机sd卡
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭