带有按钮单击的径向菜单android? [关闭]

Posted

技术标签:

【中文标题】带有按钮单击的径向菜单android? [关闭]【英文标题】:Radial menu android with button click? [closed] 【发布时间】:2012-09-16 15:08:48 【问题描述】:

我想设计这样的菜单。

我尝试过动画,但它不保留按钮的位置。

如果有人做过这种类型的菜单,请指导我。

任何帮助将不胜感激。

【问题讨论】:

我认为Rotatory wheel in android 为您提供了创建此类小部件的完美想法。它对我也有帮助。还要检查This Example. 参考此链接***.com/questions/10222730/… This 可以提供帮助。还要检查this example。 找到解决办法了吗? 在这方面需要一些帮助.. 【参考方案1】:

我最近创建了这个圆形菜单以添加到我最近的项目中。看起来像

您需要创建一个新视图并绘制此视图,检查用户输入(他正在触摸的位置),设计一个反馈机制,例如,在我看来,如果用户触摸了 5 个弧中的任何一个,背景颜色变为天蓝色。这是我的 onDrawMethod 代码。

protected void onDraw(Canvas canvas) 
        // TODO Auto-generated method stub

        px = getMeasuredWidth()/2;     
        py = getMeasuredHeight();


        initial = 144;
        finalangle = 252;

        centerCircleradius  = 30;
        middleCircleRadius = 140;




            int init, fina;
            init = 160;    
            fina = 360;
            finalOVal.set(px-middleCircleRadius-4, py-middleCircleRadius-4, px+middleCircleRadius+4, py+middleCircleRadius+4);
            middleOval.set(px-middleCircleRadius, py-middleCircleRadius, px+middleCircleRadius, py+middleCircleRadius);
            while(init<fina)
            
                circlePaint.setColor(colors[i]);
                canvas.drawArc(finalOVal,init,10,false, circlePaint);
                i++;
                if(i>=colors.length)
                
                    i=0;
                
                init = init + 10;

            



            canvas.drawArc(middleOval, 180, 180, false, pencil);

            midInitial = 180;


            i=0;

            //Creating the first Arc
            if(arcTouched[0])
            

                canvas.drawArc(middleOval, midInitial, 36, true, arcTouchedBack);
                canvas.drawArc(middleOval, midInitial, 36, true, pencil);
            
            else
            
                canvas.drawArc(middleOval, midInitial, 36, true, middleCircleBody);
                canvas.drawArc(middleOval, midInitial, 36, true, pencil);
            
            canvas.drawBitmap(bitmap.get(0), null, (putBitmapTo(midInitial, 36, 140, px, py)), null);
            midInitial+=36;

            if(arcTouched[1])
            

                canvas.drawArc(middleOval, midInitial, 36, true, arcTouchedBack);
                canvas.drawArc(middleOval, midInitial, 36, true, pencil);
            
            else
            
                canvas.drawArc(middleOval, midInitial, 36, true, middleCircleBody);
                canvas.drawArc(middleOval, midInitial, 36, true, pencil);
            
            canvas.drawBitmap(bitmap.get(1), null, (putBitmapTo(midInitial, 36, 140, px, py)), null);
            midInitial+=36;

            if(arcTouched[2])
            

                canvas.drawArc(middleOval, midInitial, 36, true, arcTouchedBack);
                canvas.drawArc(middleOval, midInitial, 36, true, pencil);
            
            else
            
                canvas.drawArc(middleOval, midInitial, 36, true, middleCircleBody);
                canvas.drawArc(middleOval, midInitial, 36, true, pencil);
            
            canvas.drawBitmap(bitmap.get(2), null, (putBitmapTo(midInitial, 36, 140, px, py)), null);
            midInitial+=36;
            //Creatring the second Arc

            if(arcTouched[3])
            

                canvas.drawArc(middleOval, midInitial, 36, true, arcTouchedBack);
                canvas.drawArc(middleOval, midInitial, 36, true, pencil);
            
            else
            
                canvas.drawArc(middleOval, midInitial, 36, true, middleCircleBody);
                canvas.drawArc(middleOval, midInitial, 36, true, pencil);
            
            canvas.drawBitmap(bitmap.get(3), null, (putBitmapTo(midInitial, 36, 140, px, py)), null);
            midInitial+=36;

            if(arcTouched[4])
            

                canvas.drawArc(middleOval, midInitial, 36, true, arcTouchedBack);
                canvas.drawArc(middleOval, midInitial, 36, true, pencil);
            
            else
            
                canvas.drawArc(middleOval, midInitial, 36, true, middleCircleBody);
                canvas.drawArc(middleOval, midInitial, 36, true, pencil);
            
            canvas.drawBitmap(bitmap.get(4), null, (putBitmapTo(midInitial, 36, 140, px, py)), null);           
            canvas.drawCircle(px, py-10, 40, pencil);
            canvas.drawCircle(px, py-10, 39, smallCircleCore);

            canvas.drawCircle(px, py-10, 35, bigArc);
            canvas.drawCircle(px, py-10, 20, smallCircleCore);

            canvas.drawCircle(px, py-10, 15, bigArc);
            canvas.drawLine(px-8, py-10, px+8, py-10, lineCore);

        canvas.save();
    

您可能需要的一些参考资料。

bitmap -> 是一个包含图片的数组列表

arcToched[] -> 是一个定义圆弧背景的数组,这个布尔数组的值在 onTouchEvent() 方法中被修改。

lineCore、smallCircleCore .....都是颜料。

我知道这不是最好的方法,也不专业。我根据需要创建了这个菜单。在您更改角度计算之前,它无法以某种方式缩放。

此视图深受 Catch Notes 应用程序的启发。我在创建这个视图时遇到的唯一麻烦是确定触摸的弧线。我在这里使用的唯一动画就像 Catch Notes 一样(圆形菜单扩展得比给定大小多一点,然后恢复正常)。

【讨论】:

请全班发帖 :) 我需要相同的功能。但我需要这个菜单也应该滚动。意味着像拨号器..请帮助我..请 菜单看起来棒极了。你能把整个代码放上去,这样对所有人都有帮助吗? 请在此处查看此问题。我在这个问题中提供了完整的代码。 ***.com/questions/12579224/… @Paras 干得好,我建议您将其添加到您的 Github 帐户中,以便您和其他程序员可以分叉和更新它。

以上是关于带有按钮单击的径向菜单android? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

带有按钮的 Eclipse android 主菜单启动新活动(IES)

Android,完成所有活动

如何处理后退按钮android以退出应用程序并在首页中打开时关闭本机导航侧菜单

带有 Pyside/PyQt 的径向菜单

如何在主页中打开后退按钮 android 以退出应用程序并关闭反应本机导航侧菜单

问题:单击关闭按钮会使下方的移动菜单按钮处于悬停状态