旋转菜单之优酷视频

大家可能没有见过旋转菜单的,但是我这次要做的就是类似优酷上的旋转菜单。


要做成这样,首先你得做好布局:

mainActivity。xml文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
<!-- 三级菜单 -->
    <RelativeLayout
        android:id="@+id/rel3"
        android:layout_width="215dp"
        android:layout_height="125dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:background="@drawable/level3" >


        <ImageView
            android:id="@+id/channel1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_marginLeft="3dp"
            android:src="@drawable/channel1" />


        <ImageView
            android:id="@+id/imageView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_above="@id/channel1"
            android:layout_marginBottom="10dp"
            android:layout_marginLeft="20dp"
            android:src="@drawable/channel2" />


        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="45dp"
            android:layout_marginTop="20dp"
            android:src="@drawable/channel3" />


        <ImageView
            android:id="@+id/channel4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:src="@drawable/channel4" />


        <ImageView
            android:id="@+id/channel7"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentRight="true"
            android:layout_marginRight="5dp"
            android:src="@drawable/channel7" />


        <ImageView
            android:id="@+id/imageView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignTop="@+id/imageView1"
            android:layout_marginLeft="14dp"
            android:layout_toRightOf="@+id/channel4"
            android:src="@drawable/channel5" />


        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignTop="@+id/imageView2"
            android:layout_toRightOf="@+id/imageView3"
            android:src="@drawable/channel6" />
    </RelativeLayout>
    
    <!-- 二级菜单 -->
    <RelativeLayout 
        android:id="@+id/rel2"
        android:layout_width="140dp"
        android:layout_height="80dp"
        android:background="@drawable/level2"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        >
        <ImageView 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/icon_search"
            android:layout_alignParentBottom="true"
            android:layout_marginLeft="3dp"
            />
        <ImageView 
            android:id="@+id/menu_Iv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/icon_menu"
            android:layout_centerHorizontal="true"/>
        <ImageView 
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/icon_myyouku"
            android:layout_alignParentRight="true"
            android:layout_alignParentBottom="true"
            />
        
    </RelativeLayout>
    
    <!-- 一级菜单 -->
    <RelativeLayout 
        android:layout_width="80dp"
        android:layout_height="45dp"
        android:background="@drawable/level1"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        >
        <ImageView 
            android:id="@+id/home_iv"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:src="@drawable/icon_home"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"/>
    </RelativeLayout>
    
    
</RelativeLayout>

做好布局之后我们就可以给三个菜单加动画效果了,所以我们设置了第二菜单和第三菜单的Id

Main.java

package com.xx.youku;


import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;
import android.widget.RelativeLayout;


public class MainActivity extends Activity implements OnClickListener{


private ImageView home_IV,menu_iv;
private boolean level2isPlay=true;    //判断二级菜单的显示状况
private boolean level3isPlay=true; //判断二级菜单的显示状况
private RelativeLayout r2;
private RelativeLayout r3;
private int flag;                     //判断有几个动画在执行
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
public void initView() {
home_IV =(ImageView)findViewById(R.id.home_iv);
r2=(RelativeLayout)findViewById(R.id.rel2);
r3=(RelativeLayout)findViewById(R.id.rel3);
menu_iv=(ImageView)findViewById(R.id.menu_Iv);
home_IV.setOnClickListener(this);
menu_iv.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.home_iv:
//点击home按钮的逻辑代码
 ClickHomeIv();
break;
case R.id.menu_Iv:
clickMenu();
break;
default:
break;
}
}
public void ClickHomeIv(){
//分情况考虑
if(flag>0){
 return;
 }
//1、二级菜单和三级菜单都显示。将二三级菜单隐藏,并且改变标记位
if(level2isPlay&&level3isPlay){
hideMenu(r2,100);
hideMenu(r3,150);
level2isPlay=false;
level3isPlay=false;
return;
}

//2、二三级菜单都不显示。那么只显示二级菜单,并且改变标记位
if (!level2isPlay&&!level3isPlay) {
showMenu(r2);
level2isPlay=true;
return;
}
//3、二级菜单显示且三级菜单不显示,那么将二级菜单隐藏,并且改变标记位
if(level2isPlay&&!level3isPlay){
hideMenu(r2,0);
level2isPlay=false;
return;

}

}
//显示菜单
private void showMenu(RelativeLayout view){
//view.setVisibility(View.VISIBLE);
int count=view.getChildCount();
for(int i=0;i<count;i++){
view.getChildAt(i).setEnabled(true);
}

RotateAnimation ra=new RotateAnimation(-180, 0, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 1.0f);
ra.setDuration(500);
ra.setFillAfter(true);
ra.setAnimationListener(new AnimationListener() {

@Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub
flag++;

}
public void onAnimationRepeat(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
// TODO Auto-generated method stub
flag--;
}
});
view.startAnimation(ra);

}
/*
* 隐藏菜单
*/

private void hideMenu(RelativeLayout view,long startOffset){
//view.setVisibility(View.GONE);

//如果要隐藏菜单,那么就将相应的控件设为没有焦点

//获取父容器中有几个子控件
int count=view.getChildCount();
for(int i=0;i<count;i++){
view.getChildAt(i).setEnabled(false);
}
/*
* fromDegrees起始旋转角度,toDegrees旋转多少角度,pivotXType X轴的伸缩模式,pivotYType Y轴的伸缩模式
* (pivotXValue,pivotYValue) 旋转中心点
*/

//RotateAnimation re=new RotateAnimation(fromDegrees, toDegrees, pivotXType, pivotXValue, pivotYType, pivotYValue)
RotateAnimation ra=new RotateAnimation(0, -180, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 1.0f);
ra.setDuration(500);                                            //动画持续时间
///动画结束时停留的位置
ra.setFillAfter(true);                                               //让菜单停留在动画结束的位置上
//设置其startOffset为动态加载
ra.setStartOffset(startOffset);                              //设置动画的延迟执行
ra.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub
flag++;
}
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub
}
public void onAnimationEnd(Animation animation) {
// TODO Auto-generated method stub
flag--;
}
});
view.startAnimation(ra);

}

//点击menu按钮逻辑
private void clickMenu(){
if(flag>0){
 return;
 }
if (level3isPlay) {
hideMenu(r3,0);
level3isPlay=false;
return;
}
if(!level3isPlay
//&&level2isPlay
){
showMenu(r3);
level3isPlay=true;
return;
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}


@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}

其中最重要的是它的动态的判断:



而后的其他的我再上面的代码中注释的很清楚了,希望对你会有所帮助。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity UI 滑动旋转菜单是一种常见的交互设计,在游戏或应用程序中经常使用。它可以实现通过滑动手势来控制菜单旋转方向和角度。 在Unity中,可以通过以下步骤来实现滑动旋转菜单: 1. 创建UI元素:首先,需要创建一个UI元素,例如一个滑动条或一个滑动面板。可以使用Unity内置的UI组件来创建,或者自己编写自定义的UI组件。 2. 添加滑动脚本:给滑动条或滑动面板添加一个脚本,用于处理滑动手势事件。可以使用Unity的事件系统来检测和响应滑动手势。 3. 控制菜单旋转:在滑动脚本中,根据滑动手势的方向和距离计算旋转的角度。可以使用Transform组件中的Rotate()方法来实现菜单旋转。 4. 更新UI显示:在每一帧中,根据计算得到的旋转角度,更新菜单的UI显示。可以使用RectTransform组件来控制UI元素的位置和大小。 需要注意以下几点: 1. 滑动范围:要限制滑动的范围,避免菜单旋转过度或不足。可以设置滑动条的最小值和最大值,或者设置滑动面板的边界。 2. 交互效果:可以添加一些额外的交互效果,例如菜单随着滑动手势的速度而旋转的快慢,或者添加音效和动画效果。 3. 兼容性:要考虑到不同平台和设备的兼容性,确保滑动旋转菜单在各种设备上都能正常工作。 总的来说,Unity UI 滑动旋转菜单是一种简单而实用的交互方式,可以增加应用程序或游戏的用户体验。通过掌握相关的UI组件和脚本技术,可以轻松实现这种交互效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值