총 게시물 39,103건, 최근 1 건 안내 RSS 글쓰기
이전글  다음글  목록 글쓰기
[안드로이드]

화면을 줌한 이후에 이동하려면 어떻게 해야할까요?

글쓴이 : KuRoN 날짜 : 2018-05-29 (화) 18:32 조회 : 569
글주소 : http://www.androidside.com/B49/169924
 
  로저스 NBR 플로트
플로트 생산, 디자인 글로벌 리더, 친환경 소재, 맞춤 생산, 높은 내구성!
www.rogerscorp.kr
  (주)마텍 해양구조물전문
해양구조물, 부잔교, 도교, 접안장, 선박, 보트, 수상펜션, 해양기자재 마텍
martek.co.kr
  가족영화무료사이트는 예스파일
최신영화, TV방송, 애니 무료다운, 웹툰, 웹소설, 모바일 100%지원 가족영화
www.yesfile.co
신청하기


안드로이드, 자바 그리고 다양한 질문에 대해 성실히 답해드립니다. Q&A Jang



현재 코드


        float _X, _Y;
        int offset = 0, duration = 100;
        float scaleX = 1.0f, scaleY = 1.0f;
        float maxZoomLimit = 2.6f, minZoomLimit = 1.0f;



            Button _Contact_Up_Button = (Button)FindViewById(Resource.Id._Contact_Up_Button);
            Button _Contact_Down_Button = (Button)FindViewById(Resource.Id._Contact_Down_Button);
            LinearLayout _Main_Contact_Layout = (LinearLayout)FindViewById(Resource.Id._Main_Content_Layout);

            _Contact_Up_Button.Click += (s, e) =>
            {
                _Zoom_In(_Main_Content_Layout);
            };

            _Contact_Down_Button.Click += (s, e) =>
            {
                _Zoom_Out(_Main_Contact_Layout);
            };

        private void _Zoom_In(View v)
        {
            if (scaleX < maxZoomLimit && scaleY < maxZoomLimit)
            {
                Animation animation = new ScaleAnimation(scaleX, (scaleX + 0.2f), scaleY, (scaleY + 0.2f), _X, _Y);
                scaleX += 0.2f;
                scaleY += 0.2f;
                animation.Interpolator = new DecelerateInterpolator();
                animation.Duration = duration;
                animation.StartOffset = offset;
                animation.FillAfter = true;
                v.StartAnimation(animation);
            }
        }

        private void _Zoom_Out(View v)
        {
            if (scaleX > minZoomLimit && scaleY > minZoomLimit)
            {
                Animation animation = new ScaleAnimation(scaleX, (scaleX - 0.2f), scaleY, (scaleY - 0.2f), _X, _Y);
                scaleY -= 0.2f;
                scaleX -= 0.2f;
                animation.Interpolator = new DecelerateInterpolator();
                animation.Duration = duration;
                animation.StartOffset = offset;
                animation.FillAfter = true;
                v.StartAnimation(animation);
            }
        }


줌관련 코드이구요,



        public bool OnTouch(View v, MotionEvent e)
        {
            switch (e.Action)
            {
                case MotionEventActions.Down:

                    _X = e.GetX();
                    _Y = e.GetY();

                    float _Start_X = 760, _Start_Y = 160;
                    float _End_X = 1150, _End_Y = 490;


                    WindowManagerLayoutParams _Params = new WindowManagerLayoutParams();
                    _Params.X = (int)e.RawX;
                    _Params.Y = (int)e.RawY;

                    LayoutInflater inflater = (LayoutInflater)this.GetSystemService(Context.LayoutInflaterService);
                    View _Popup = inflater.Inflate(Resource.Layout.Custom_Popup, null);

                    PopupWindow _Window = new PopupWindow(_Popup, WindowManagerLayoutParams.WrapContent, WindowManagerLayoutParams.WrapContent);
                    _Window.SetBackgroundDrawable(new BitmapDrawable());
                    _Window.OutsideTouchable = true;

                    TextView _SetupX = (TextView)_Popup.FindViewById(Resource.Id.x_text);
                    TextView _SetupY = (TextView)_Popup.FindViewById(Resource.Id.y_text);

                    _SetupX.Text = "X 좌표 : " + _X.ToString("#.##");
                    _SetupY.Text = "Y 좌표 : " + _Y.ToString("#.##");

                    DrawerLayout _lstDrawer = (DrawerLayout)v.FindViewById(Resource.Id._DrawerLayout);
                    

                    if(_Start_X > _X | _Start_Y > _Y | _End_X < _X | _End_Y < _Y )
                    {
                        _Window.Focusable = true;
                        _Window.ShowAsDropDown(_Popup, _Params.X, _Params.Y);
                        _Window.ShowAtLocation(_Popup, GravityFlags.Left | GravityFlags.Top, 0, 0);
                        _lstDrawer.CloseDrawer((int)GravityFlags.Left);
                    }
                    
                    else if (_Start_X < _X & _Start_Y < _Y & _End_X > _X & _End_Y > _Y & !_lstDrawer.IsDrawerOpen((int)GravityFlags.Left))
                    {
                        _lstDrawer.OpenDrawer((int)GravityFlags.Left);
                        _Window.ShowAsDropDown(_Popup, _Params.X, _Params.Y);
                        _Window.ShowAtLocation(_Popup, GravityFlags.Left | GravityFlags.Top, 0, 0);
                    }

                    else if (_lstDrawer.IsDrawerOpen((int)GravityFlags.Left))
                    {
                        _lstDrawer.CloseDrawer((int)GravityFlags.Left);
                    }

                    break;
            }

            return true;
        }



터치 액션에 관한 코드입니다.


Move 로 해서 움직일 수 있다고는 들은 것 같은데, 아무리 해봐도 이동이 되질 않습니다.

질문 : 버튼을 이용하여 화면을 줌 한 이후에, 화면을 이동할 수 있을까요?
액티비티 전환이나 이런게 아니라 만약 ( 좌표 : 300, 300 ) 을 중심으로 확대를 했다면
300, 300을 중심으로 화면을 오른쪽으로 드래그하면 부드럽게 다른 좌표로 이동하는 형식입니다.




질문자가 자신의 포인트 10 점을 걸었습니다.
답변하시면 포인트 2을, 답변이 채택되면 포인트 8을 드립니다.

질문답변 게시판에서 궁금한 사항을 해결하셨다면, 애써 답변해주신 분께 잘 되었다고 따뜻한 댓글 한마디 남겨주세요.
그리고 답변해주신 분의 글을 '추천' 해주세요.
추천받으신 분에게 1포인트가, 추천하신 분에게도 1포인트가 적립됩니다. ^^

어비서 2018-05-30 (수) 09:30
https://github.com/chrisbanes/PhotoView
이거 참고 하시면 될 듯 싶어서 링크 남깁니다
댓글주소 추천 0 반대 0
     
     
KuRoN 2018-05-30 (수) 15:03
[@어비서] 뭔가 굉장히 복잡하게 되어있어서 찾을 수가 없네요..ㅋㅋㅋ;;;
댓글주소 추천 0 반대 0
이전글  다음글  목록 글쓰기

 


Copyright ⓒ www.androidside.com. All rights reserved.
채팅 권한: 글쓰기 1개
2레벨 이상만 대화 가능
공개 채팅: 평일 !(9시 ~ 17시),토,일
안사2 변경사항 보러가기 챗방이 잘 안보이면 크롬에서 접속해주세요
챗방 숨기기 |  챗방 보이기