久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

Android Catch Notes 應用程序,如圓形菜單

Android Catch Notes App Like Circle Menu(Android Catch Notes 應用程序,如圓形菜單)
本文介紹了Android Catch Notes 應用程序,如圓形菜單的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我要開發應用程序,我想創建像 Catch notes 應用

I am going to develop the app and i want to create the menu like Catch notes App

屏幕截圖

任何知道我如何實現此功能或是否有可用的庫的人.請告訴我.

anybody who know how can i implement this or if any library available for it. please let me know.

謝謝

推薦答案

我最近創建了這個圓形菜單以添加到我最近的項目中.看起來像

I recently created this circular menu to add up in my recent project. It looks like

您需要創建一個新視圖并繪制此視圖,檢查用戶輸入(他正在觸摸的位置),設計一個反饋機制,例如,在我看來,如果用戶觸摸了 5 個弧中的任何一個,背景顏色變為天藍色.這是我的視圖類代碼.

What you need is to create a new View and draw this view, check for the user inputs (where he is touching), design a feedback mechanism, for example, in my view, if user touches any of the 5 arcs, background color changes to skyblue. Here is my code for View Class.

:這次我發布了我所有的視圖代碼.希望對你有幫助.

: This time I am posting all my code for the view. Hope it might help you.

public class SmallCircleView extends View{

    private Paint smallCircleCore;
    private Paint lineCore;
    private Paint bigArc;
    private Paint bigArcDraw;
    private Paint pencil;
    private Paint middleCircleBody;
    private Paint arcTouchedBack;
    private Paint circlePaint;

    private int initial, midInitial;
    private int finalangle;
    private int middleCircleRadius;
    private int i =0;

    private int centerCircleradius;

    int[] colors = new int[]{0xFF33B5E5,
            0xFFAA66CC,
            0xFF99CC00,
            0xFFFFBB33,
            0xFFFF4444,
            0xFF0099CC,
            0xFFAA66CC,
            0xFF669900,
            0xFFFF8800,
            0xFFCC0000};

    private RectF oval = new RectF();
    private RectF middleOval = new RectF();
    private RectF finalOVal = new RectF();

    private Context context;
    private int px, py;

    private boolean isClicked = true;
    private boolean[] arcTouched= new boolean[]{false, false, false, false, false};

    EmbossMaskFilter emboss;
    EmbossMaskFilter forBig;

    private ArrayList<Bitmap> bitmap = new ArrayList<Bitmap>();

    public SmallCircleView(Context context) {
        super(context);
        this.context = context;
        initSmallCircle();

        // TODO Auto-generated constructor stub
    }

    public SmallCircleView(Context context, AttributeSet attri)
    {
        super(context, attri);
        this.context = context;

        initSmallCircle();
    }

    public SmallCircleView(Context context, AttributeSet attri, int defaultStyle)
    {
        super(context, attri, defaultStyle);
        this.context = context;

        initSmallCircle();
    }

    private void initSmallCircle()
    {
        setFocusable(true);

        smallCircleCore = new Paint(Paint.ANTI_ALIAS_FLAG);
        lineCore = new Paint(Paint.ANTI_ALIAS_FLAG);
        bigArc = new Paint(Paint.ANTI_ALIAS_FLAG);
        pencil = new Paint(Paint.ANTI_ALIAS_FLAG);

        lineCore.setColor(0xFFFFFFFF);
        lineCore.setStyle(Paint.Style.FILL);
        lineCore.setStrokeWidth(4);
        //bigCircleCore.setStrokeWidth(5);

        smallCircleCore.setStyle(Paint.Style.FILL);
        smallCircleCore.setColor(0xFFFFFFFF);

        bigArc.setColor(0xFF424242);
        bigArc.setStyle(Paint.Style.FILL);

        bigArcDraw = new Paint(smallCircleCore);
        bigArcDraw.setStrokeWidth(4);
        bigArcDraw.setColor(0xFF000000);

        pencil.setStrokeWidth(0.5f);
        pencil.setColor(0x80444444);
        pencil.setStyle(Paint.Style.STROKE);

        middleCircleBody = new Paint(bigArc);
        middleCircleBody.setColor(0xFFE6E6E6);

        arcTouchedBack = new Paint(Paint.ANTI_ALIAS_FLAG);
        arcTouchedBack.setColor(0xFF81DAF5);
        arcTouchedBack.setStyle(Paint.Style.FILL);      

        circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
        circlePaint.setStyle(Paint.Style.STROKE);
        circlePaint.setStrokeWidth(10);



        float[] direection = new float[]{1,1,1};
        float light = 0.4f;
        float specualr = 6;
        float blur = 3.5f;      

        emboss = new EmbossMaskFilter(direection, light, specualr, blur);
        forBig = new EmbossMaskFilter(direection, 1f, 4, 2.5f);

        bitmap.clear();
        bitmap.add(BitmapFactory.decodeResource(getResources(), R.drawable.tasks));
        bitmap.add(BitmapFactory.decodeResource(getResources(), R.drawable.file_manager));
        bitmap.add(BitmapFactory.decodeResource(getResources(), R.drawable.home));
        bitmap.add(BitmapFactory.decodeResource(getResources(), R.drawable.contacts));      
        bitmap.add(BitmapFactory.decodeResource(getResources(), R.drawable.reminder));


        middleCircleBody.setMaskFilter(forBig);
        bigArc.setMaskFilter(forBig);

        String log="";
        Log.d(log, "Value of px & py " + getMeasuredWidth() + " " + getMeasuredHeight());
    }

    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
    {
        int measuredWidth = measure(widthMeasureSpec);
        int measuredHeight = measure(heightMeasureSpec);

        int d = Math.min(measuredWidth, measuredHeight);

        setMeasuredDimension(d,d);
    }

    private int measure(int measureSpec)
    {
        int result = 0;

        int specMode = MeasureSpec.getMode(measureSpec);
        int specSize = MeasureSpec.getSize(measureSpec);

        if(specMode == MeasureSpec.UNSPECIFIED)
        {
            result = 200;
        }
        else
        {
            result = specSize;
        }

        return result;
    }

    @Override
    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;

            }
            //Setting Mask Filter


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



    @Override
    public boolean onTouchEvent(MotionEvent event) {
        // TODO Auto-generated method stub

        float centerX = px;
        float centerY = (py-centerCircleradius+(centerCircleradius/4));

        switch(event.getAction())
        {
            case MotionEvent.ACTION_DOWN:
            {
                if(isInSideCenterCircle(centerX, centerY, centerCircleradius, event.getX(), event.getY()))
                {
                    return super.onTouchEvent(event);
                }
                if(isInArc(180, 36, middleCircleRadius, px, py, event.getX(), event.getY()))
                {

                    makeAllFalse();
                    arcTouched[0] = true;
                    invalidate();
                    return true;
                }

                if(isInArc(216, 36, middleCircleRadius, px, py, event.getX(), event.getY()))
                {

                    makeAllFalse();
                    arcTouched[1] = true;
                    invalidate();
                    return true;
                }

                if(isInArc(252, 36, middleCircleRadius, px, py, event.getX(), event.getY()))
                {

                    makeAllFalse();
                    arcTouched[2] = true;
                    invalidate();
                    return true;
                }

                if(isInArc(288,36, middleCircleRadius, px, py, event.getX(), event.getY()))
                {

                    makeAllFalse();
                    arcTouched[3] = true;
                    invalidate();
                    return true;
                }

                if(isInArc(324, 36, middleCircleRadius, px, py, event.getX(), event.getY()))
                {

                    makeAllFalse();
                    arcTouched[4] = true;
                    invalidate();
                    return true;
                }
            }
            case MotionEvent.ACTION_UP:
            {


                if(isInSideCenterCircle(centerX, centerY, centerCircleradius, event.getX(), event.getY()))
                {
                    return super.onTouchEvent(event);
                }

                if(isInArc(180, 36, middleCircleRadius, px, py, event.getX(), event.getY()))
                {
                    Toast.makeText(getContext(), "In the first Arc !!!", Toast.LENGTH_SHORT).show();
                    makeAllFalse();

                    invalidate();
                    return false;
                }

                if(isInArc(216, 36, middleCircleRadius, px, py, event.getX(), event.getY()))
                {
                    Toast.makeText(getContext(), "In Second Arc", Toast.LENGTH_SHORT).show();
                    makeAllFalse();

                    invalidate();
                    return false;
                }

                if(isInArc(252, 36, middleCircleRadius, px, py, event.getX(), event.getY()))
                {
                    Toast.makeText(getContext(), "In Third Arc", Toast.LENGTH_SHORT).show();
                    makeAllFalse();

                    invalidate();
                    return false;
                }

                if(isInArc(288,36, middleCircleRadius, px, py, event.getX(), event.getY()))
                {
                    Toast.makeText(getContext(), "In fourth Arc", Toast.LENGTH_SHORT).show();
                    makeAllFalse();

                    invalidate();
                    return false;
                }

                if(isInArc(324, 36, middleCircleRadius, px, py, event.getX(), event.getY()))
                {
                    Toast.makeText(getContext(), "In Fifth Arc", Toast.LENGTH_SHORT).show();
                    makeAllFalse();

                    invalidate();
                    return false;
                }

                else
                {
                    makeAllFalse();
                    invalidate();
                    return super.onTouchEvent(event);
                }
            }
            case MotionEvent.ACTION_MOVE:
            {
                if(isInSideCenterCircle(centerX, centerY, centerCircleradius, event.getX(), event.getY()))
                {
                    makeAllFalse();
                    invalidate();
                    return super.onTouchEvent(event);
                }

                if(isInArc(180, 36, middleCircleRadius, px, py, event.getX(), event.getY()))
                {

                    makeAllFalse();
                    arcTouched[0] = true;
                    invalidate();
                    return false;
                }

                if(isInArc(216, 36, middleCircleRadius, px, py, event.getX(), event.getY()))
                {

                    makeAllFalse();
                    arcTouched[1] = true;
                    invalidate();
                    return false;
                }

                if(isInArc(252, 36, middleCircleRadius, px, py, event.getX(), event.getY()))
                {

                    makeAllFalse();
                    arcTouched[2] = true;
                    invalidate();
                    return false;
                }

                if(isInArc(288,36, middleCircleRadius, px, py, event.getX(), event.getY()))
                {

                    makeAllFalse();
                    arcTouched[3] = true;
                    invalidate();
                    return false;
                }

                if(isInArc(324, 36, middleCircleRadius, px, py, event.getX(), event.getY()))
                {

                    makeAllFalse();
                    arcTouched[4] = true;
                    invalidate();
                    return false;
                }

                else
                {
                    makeAllFalse();
                    invalidate();
                    return super.onTouchEvent(event);
                }
            }
        }
        return super.onTouchEvent(event);
    }

    private boolean isInSideCenterCircle(float centerX, float centerY, float radius, float co_ordinateX, float co_ordinateY)
    {       
        return ((Math.pow((centerX-co_ordinateX),2))+(Math.pow((centerY-co_ordinateY),2))-Math.pow(radius, 2))<=0;      
    }

    private void changeIsClicked()
    {
        isClicked =(isClicked?(false):(true));
    }

    private RectF putBitmapTo(int startAngle, int SweepAngle, float radius, float centerX, float centerY)
    {
        float locx = (float) (centerX +((radius/17*11)*Math.cos(Math.toRadians(
                                                         (startAngle+SweepAngle+startAngle)/2
                                                         ))
                                                         ));
        float locy = (float) (centerY + ((radius/17*11)*Math.sin(Math.toRadians(
                                                         (startAngle+SweepAngle+startAngle)/2
                                                         ))
                                                         ));

        return new RectF(locx-20, locy-20, locx+20, locy+20);   

    }

    private boolean isInArc(int startAngle, int SweepAngle, float radius, float centerX, float centerY, float toCheckX, float toCheckY)
    {

        double degree;

        if(
           (Math.pow(centerX - toCheckX, 2) + 
           Math.pow(centerY - toCheckY, 2) -
           Math.pow(radius, 2))<=0)
        {           
            double radian = Math.atan((centerY-toCheckY)/(centerX-toCheckX));
            if(radian<0)                
            {
                degree = Math.toDegrees(radian);
                degree = 360+ degree;                   
            }
            else
            {               
                degree = Math.toDegrees(radian);
                degree = 180 + degree;          
            }           

            if(degree>=startAngle)
            {               
                if(degree<=(startAngle+SweepAngle))
                {                   
                    return true;
                }               
            }           
        }       
        else
        {
            return false;
        }       
        return false;
    }

    private void makeAllFalse()
    {
        for(int i=0;i<arcTouched.length;i++)
        {
            arcTouched[i] = false;
        }
    }

}

我知道這不是最好的方法,也不專業.我根據需要創建了這個菜單.在您更改角度計算之前,它無法以某種方式縮放.

I know this isn't the best way and not professional too. I created this menu as per need. Its not scale able in a way until you change the angle calculations.

這篇關于Android Catch Notes 應用程序,如圓形菜單的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

EditText: Disable Paste/Replace menu pop-up on Text Selection Handler click event(EditText:禁用文本選擇處理程序單擊事件上的粘貼/替換菜單彈出)
Multiline EditText with Done SoftInput Action Label on 2.3(2.3 上帶有完成 SoftInput 操作標簽的多行 EditText)
How to detect the swipe left or Right in Android?(如何在 Android 中檢測向左或向右滑動?)
Prevent dialog dismissal on screen rotation in Android(防止在Android中的屏幕旋轉對話框解除)
How do I handle ImeOptions#39; done button click?(如何處理 ImeOptions 的完成按鈕點擊?)
How do you set EditText to only accept numeric values in Android?(您如何將 EditText 設置為僅接受 Android 中的數值?)
主站蜘蛛池模板: 九色视频网 | 日韩久久精品 | 美日韩免费视频 | 久久久久久国产精品久久 | 精品九九久久 | 7777久久 | 亚洲福利网站 | 欧美爱爱视频网站 | 99视频免费| h视频在线观看免费 | 亚洲精品免费视频 | 一区二区三区在线播放视频 | 中文二区| 成人h视频在线观看 | 欧美日韩中文字幕 | 国产精品久久久久久久久污网站 | 色吊丝2| 99精品国产一区二区三区 | 日韩免费看视频 | 国产日韩精品久久 | 成人精品国产一区二区4080 | 成人h视频在线 | 福利视频大全 | 国产综合区 | 免费av手机在线观看 | 日韩高清国产一区在线 | 久久国产精品一区二区三区 | 一级黄色片在线免费观看 | 亚洲精品3 | 国产精品久久一区 | 深夜福利影院 | 免费视频一区二区 | 日韩一区二区在线观看 | 亚洲日本中文 | 无码一区二区三区视频 | 国产精品久久久久久久久久 | 黑人巨大精品欧美一区二区免费 | 久久精品欧美一区二区三区不卡 | 国产一区二区三区在线视频 | av中文在线 | 九一视频在线播放 |