배경 : ActionBar를 사용하려 했으나, 개발적 여건으로 Toolbar를 사용해야 했다.
Toolbar의 PopupMenu를 내 입맛에 맞게끔 Theme Style을 바꾸려고 했으나,
API 16, Jelly Bean을 지원해야 하다보니, API 21을 못 사용하게 되었다.

결론적으로 이차저차해서 Toolbar를 직접 만들고, PopupMenu도 만들어야 할 상황이.. ㅠㅠ

그러다가 Round Popup메뉴를 만들어야 할 상황...






결론...

Round Popup메뉴를 만드는 방법!!

ListView를 하나 만들고, 그 ListView를 둥글게 디자인 한 다음,
그 놈을 PopupWindow에 붙이면 됨!


즉, 모든 뷰를 만들고 그 뷰를 Draw할 때, 
Path를 설정하여 자른다면..  무슨 Component든 round rectangle을 만들수 있다는 의미,

또, 이놈을 PopupWindow에 붙인다면...
Round Popup Component도 가능하다는 말씀!




Path설정하여 Round Rectangle을 만드는 방법...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
        final Path path = new Path();
        final int round = 20;
        mListView = new ListView(context){
            @Override
            protected void dispatchDraw(Canvas canvas) {
                canvas.save();
                path.rewind();
 
                // make round-rectangle path
                path.moveTo(round, 0);
                path.lineTo(getWidth()-round, 0);
                path.quadTo(getWidth(), 0, getWidth(), round);
                path.lineTo(getWidth(), getHeight()-round);
                path.quadTo(getWidth(), getHeight(), getWidth()-round, getHeight());
                path.lineTo(round, getHeight());
                path.quadTo(0, getHeight(), 0, getHeight()-round);
                path.lineTo(0, round);
                path.quadTo(00, round, 0);
                path.close();
 
                canvas.clipPath(path);
                canvas.drawColor(getResources().getColor(R.color.popup_menu_selector));
                super.dispatchDraw(canvas);
                canvas.restore();
            }
        };







Posted by 소망아기
: