Android自定义CIrcleView
来源:互联网 发布:linux 机器重启时间 编辑:程序博客网 时间:2024/06/07 23:04
public class CircleView extends View {
private int viewW,viewH;
private DrawBackground mBackground;
private boolean isInitView = false;//是否初始化过此view里面的所有资源
private Activity mContext;
public CircleView(Context context, AttributeSet attrs) {
super(context, attrs);
this.mContext = (Activity) context;
}
public CircleView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.mContext = (Activity) context;
}
public CircleView(Context context) {
super(context);
this.mContext = (Activity) context;
}
private List<DrawOneRowView> rowView = new ArrayList<DrawOneRowView>();
private String menuStr[][] = new String[][]{
{"00菜单","01菜单","02菜单","03菜单","04菜单","05菜单",},
{"10菜单","11菜单","12菜单","13菜单","14菜单"},
{"20菜单","21菜单","22菜单","23菜单","24菜单","25菜单",},
// {"30菜单","31菜单","32菜单","33菜单","34菜单","35菜单",},
};
private void init(){
int RR = viewH*1/2;//最大半径调整 在此处
if(viewW < viewH){
RR = viewW*1/2;
}
int r = 20;//中间空出部分圆半径
int count = menuStr.length+1;//总的有几个白色圆圈
int gadr = (RR-r)/count;//间隔,两个圆圈之间的
int centerX = viewW/2;//圆的中心位置
// int centerY = viewH/2;
int centerY = viewH;//位于手机底部边沿
mBackground = new DrawBackground(centerX, centerY,RR,r,count);
for(int i=0;i<count-1;i++){
DrawOneRowView row = new DrawOneRowView(centerX, centerY, RR -gadr*i , RR -gadr*i - gadr, menuStr[i], -6*i);
final int arrayIndex = i;
row.setListener(new OnClikListener() {
@Override
public void onClick(int menuIndex) {
// TextView textview = (TextView) mContext.findViewById(R.id.textview);
if(menuIndex>=0 && menuIndex<menuStr[arrayIndex].length){
Log.w("wlb"," 您点击了菜单 : "+menuStr[arrayIndex][menuIndex]);
// textview.setText(" 您点击了菜单 : "+menuStr[arrayIndex][menuIndex]);
((FirstActivity)mContext).removeCircleView();
}
}
});
rowView.add(row);
}
}
@Override
public void onDraw(Canvas canvas) {
if(!isInitView){
isInitView = true;
viewW = this.getWidth();
viewH = this.getHeight();
init();
}
mBackground.drawSelf(canvas);
for(DrawOneRowView view : rowView){
view.drawSelf(canvas);
}
}
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouchEvent(MotionEvent event){
if(event.getAction() != MotionEvent.ACTION_DOWN){
for(DrawOneRowView view : rowView){
if(view.isFocus()){
// Log.i("invalidate", ">>>>>invalidate");
this.invalidate();
return view.onTouchEvent(event);
}
}
}else{
for(DrawOneRowView view : rowView){
if(view.onTouchEvent(event)){
this.invalidate();
return true;
}
}
}
return false;
}
}
private int viewW,viewH;
private DrawBackground mBackground;
private boolean isInitView = false;//是否初始化过此view里面的所有资源
private Activity mContext;
public CircleView(Context context, AttributeSet attrs) {
super(context, attrs);
this.mContext = (Activity) context;
}
public CircleView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
this.mContext = (Activity) context;
}
public CircleView(Context context) {
super(context);
this.mContext = (Activity) context;
}
private List<DrawOneRowView> rowView = new ArrayList<DrawOneRowView>();
private String menuStr[][] = new String[][]{
{"00菜单","01菜单","02菜单","03菜单","04菜单","05菜单",},
{"10菜单","11菜单","12菜单","13菜单","14菜单"},
{"20菜单","21菜单","22菜单","23菜单","24菜单","25菜单",},
// {"30菜单","31菜单","32菜单","33菜单","34菜单","35菜单",},
};
private void init(){
int RR = viewH*1/2;//最大半径调整 在此处
if(viewW < viewH){
RR = viewW*1/2;
}
int r = 20;//中间空出部分圆半径
int count = menuStr.length+1;//总的有几个白色圆圈
int gadr = (RR-r)/count;//间隔,两个圆圈之间的
int centerX = viewW/2;//圆的中心位置
// int centerY = viewH/2;
int centerY = viewH;//位于手机底部边沿
mBackground = new DrawBackground(centerX, centerY,RR,r,count);
for(int i=0;i<count-1;i++){
DrawOneRowView row = new DrawOneRowView(centerX, centerY, RR -gadr*i , RR -gadr*i - gadr, menuStr[i], -6*i);
final int arrayIndex = i;
row.setListener(new OnClikListener() {
@Override
public void onClick(int menuIndex) {
// TextView textview = (TextView) mContext.findViewById(R.id.textview);
if(menuIndex>=0 && menuIndex<menuStr[arrayIndex].length){
Log.w("wlb"," 您点击了菜单 : "+menuStr[arrayIndex][menuIndex]);
// textview.setText(" 您点击了菜单 : "+menuStr[arrayIndex][menuIndex]);
((FirstActivity)mContext).removeCircleView();
}
}
});
rowView.add(row);
}
}
@Override
public void onDraw(Canvas canvas) {
if(!isInitView){
isInitView = true;
viewW = this.getWidth();
viewH = this.getHeight();
init();
}
mBackground.drawSelf(canvas);
for(DrawOneRowView view : rowView){
view.drawSelf(canvas);
}
}
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouchEvent(MotionEvent event){
if(event.getAction() != MotionEvent.ACTION_DOWN){
for(DrawOneRowView view : rowView){
if(view.isFocus()){
// Log.i("invalidate", ">>>>>invalidate");
this.invalidate();
return view.onTouchEvent(event);
}
}
}else{
for(DrawOneRowView view : rowView){
if(view.onTouchEvent(event)){
this.invalidate();
return true;
}
}
}
return false;
}
}
阅读全文
0 0
- Android自定义CIrcleView
- 自定义 CircleView
- 自定义CircleView圆形图片Demo
- [Android] CircleView 仿小米空气净化器首页旋转UI
- 自定义圆环类CircleView(小小控件类,做个背景还是可以的嘛)
- Comments on Apple Sample Code : CircleView
- CircleView轻量级显示圆形,支持更多属性
- xml的布局中listview覆盖了circleview
- android 自定义
- Android--Android自定义权限
- Android--Android自定义权限
- 【Android】Android自定义ViewGroup
- 【Android】Android自定义组件
- Android 自定义Dialog(自定义主题、自定义布局
- ANDROID自定义输入法-自定义键盘
- ANDROID自定义输入法-自定义键盘
- 【android自定义控件】ProgressBar自定义
- ANDROID自定义输入法-自定义键盘
- Android线性曲线视图
- 为什么使用线程池及线程池讲解
- 处理器流水线长度是否存在理论极限?
- 自己动手写一个java版QQ
- docker_docker hub镜像加速
- Android自定义CIrcleView
- docker_相关操作
- BZOJ 1222: [HNOI2001]产品加工 dp
- HDU5938-Four Operations
- 表单标签form
- kubernetes之命令行提示(kubectl)神器kube-shell
- Java正则表达式
- Android条形图
- docker_Dockerfile构建镜像