【问题标题】:Android button with custom area带有自定义区域的 Android 按钮
【发布时间】:2014-03-05 12:42:52
【问题描述】:

如下图所示创建buttons 的最佳方法是什么??

【问题讨论】:

  • 你能详细说明你的问题吗
  • 我需要制作 4 个按钮,但我不知道应该使用哪种小部件
  • 您可以根据需要将按钮放置在线性/相对等任何布局中
  • 您可以在相对布局中使用背景为android:background="?android:attr/selectableItemBackground"的imageButtons。
  • @Dyna,是的,但是我的按钮在圆形位置,我无法添加矩形表单按钮

标签: android button layout view


【解决方案1】:

查看https://code.google.com/p/radial-menu-widget/How To Create a Rotating Wheel Control? 或此https://github.com/VadimDev/android-seekbar-like-ipod-clickwheel 或自己制作

protected void onDraw(Canvas canvas) { // TODO 自动生成的方法存根

    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();
}

【讨论】:

    【解决方案2】:

    我建议构建一个自定义组件并覆盖onTouch(View, MotionEvent)。在该方法中,做一些基本的数学运算来检查触摸是否在圆形区域内,当该方法使用触摸事件时返回true

    当您不希望使用触摸事件时,不要忘记通过返回 false 来允许其他触摸侦听器传播。

    【讨论】:

    • 谢谢,如果它是一个简单的圆圈,我完全没有问题,但我需要像图像上的红色圆圈这样的形式
    • 我相信我误解了这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多