Android 圆形菜单集,支持收起和展开,旋转。
##Feature
- 拖动旋转柄可以旋转,支持最大最小旋转角度.
- 点击菜单柄展开和收取菜单集.
- 动态分配菜单集位置,菜单集个数任意,起始菜单柄位置自定义,旋转柄起始位置自定义
##Issue
- 运用简单的内部添加控件,控制动画,控制touchEvent实现.辅助控件较多可能存在性能的问题.
- 由于rotateAnimation.RELATIVE_TO_PARENT不能使菜单项围绕中心点旋转, 现使用折衷的方式(rotateAnimation.RELATIVE_TO_SELF在菜单项套一层view,但相应的代码会增多)
- 暂未调查其他相似控件的实现原理,有更好的实现方式将会引入优化。
compile 'com.yovenny.CircleRotateMenu:library:1.0.0'
##Usage
###*incode*
private View.OnClickListener[] sClickArray = new View.OnClickListener[]{
new View.OnClickListener() {
@Override
public void onClick(View v) {
cvMainCircle.toggleMenu();
}
},
new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "click2", Toast.LENGTH_SHORT).show();
}
}
,
new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "click3", Toast.LENGTH_SHORT).show();
}
}
,
new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "click4", Toast.LENGTH_SHORT).show();
}
}
,
new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "click5", Toast.LENGTH_SHORT).show();
}
}
,
new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(MainActivity.this, "click6", Toast.LENGTH_SHORT).show();
}
}
};
private static int[] sBtnArray = new int[]{R.drawable.btn_more_selector
, R.drawable.btn_graph_selector
, R.drawable.btn_timer_selector
, R.drawable.btn_power_selector
, R.drawable.btn_hot_selector
,R.drawable.btn_cold_selector
};
//rotate handle
TextView tv = new TextView(MainActivity.this);
tv.setText("999");
tv.setTextSize(18);
tv.setTextColor(Color.WHITE);
cvMainCircle = (CircleRotateView) findViewById(R.id.cv_main_circle);
cvMainCircle.setClickable(true);
cvMainCircle.setFocusable(true);
cvMainCircle.setMenuResource(sBtnArray)
.setMenuClickListener(sClickArray)
.setCircleHandleView(tv)
//min write
.setCircleBgResource(R.drawable.main_circle)
.setMenuHandleStartDegree(90)
.setMenuIntervalDegree(30)
.setRotateHandleStartDegree(-43)
.setMenuItemWidth(120)
.setRotateDegree(180,-180)
.setOnRotateListener(new CircleRotateView.OnRotateListener() {
@Override
public void onRotateMin() {
Toast.makeText(MainActivity.this, "min", Toast.LENGTH_SHORT).show();
}
@Override
public void onRotateMax() {
Toast.makeText(MainActivity.this, "max", Toast.LENGTH_SHORT).show();
}
@Override
public void onRotate(float degree) {
}
});
<com.yovenny.circlerotatemenu.CircleRotateView
android:id="@+id/cv_main_circle"
android:layout_width="300dp"
android:layout_height="300dp"
android:layout_centerInParent="true"
app:circle_handle_start_degree="-45"
app:menu_handle_start_degree="90"
app:menu_interval_degree="30"
app:menu_width="60dp"
app:max_rotate_degree="180"
app:min_rotate_degree="-180"
app:circle_bg="@drawable/main_circle"/>