关闭

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

标签: android
295人阅读 评论(0) 收藏 举报
分类:

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

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

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代码如下:















0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2467次
    • 积分:63
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档