2016-05-15 10 views
2

В настоящее время диалог изображения загружается при нажатии на элемент. Однако всякий раз, когда активность начинается, загруженное изображение не находится в центре. Он всегда загружается в верхний левый угол экрана только во время первого нажатия.Диалоговое окно Android Диалоговое окно при запуске

По какой-то причине, когда я подавляю предметы после этого, он идеально подходит в центре, как я хотел. Но когда я снова открываю деятельность, он делает то же самое снова.

Кто-нибудь знает, что происходит? Мой код:

itemView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       final Dialog builder = new Dialog(getActivity()); 
       builder.requestWindowFeature(Window.FEATURE_NO_TITLE); 
       builder.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); 
       ImageView imageView = new ImageView(getActivity()); 

       builder.addContentView(imageView, new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT)); 
       builder.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); 

       Picasso.with(getActivity()).load("http://i.imgur.com/45oAm8N.jpg").into(imageView); 
       //Glide.with(ChillFragment.this).load("http://i.imgur.com/bbTMZHD.jpg").into(imageView); 

       mAttacher = new PhotoViewAttacher(imageView); 
       mAttacher.setOnDoubleTapListener(new GestureDetector.OnDoubleTapListener() { 
        @Override 
        public boolean onSingleTapConfirmed(MotionEvent e) { 
         //Outside region 
         if (!mAttacher.getDisplayRect().contains(e.getX(), e.getY())) { 
          builder.dismiss(); 
         } 
         return false; 
        } 

        @Override 
        public boolean onDoubleTap(MotionEvent e) { 
         return false; 
        } 

        @Override 
        public boolean onDoubleTapEvent(MotionEvent e) { 
         return false; 
        } 
       }); 

       builder.show(); 

enter image description here

Пробовал изменения в

RelativeLayout.LayoutParams Params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
       Params.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE); 
       builder.addContentView(imageView, Params); 
       builder.getWindow().setLayout(Params.width, Params.height); 
+0

По какой-то причине, когда при проверке значения для WindowManager.LayoutParams LP = новые WindowManager.LayoutParams(); lp.height и lp.width равно -1! – Petersicecream

ответ

0

Попробуйте добавить правило в программе для застройщика. Компоновка Params, что вы используете для представления изображения также должен иметь правила добавила, что:

RelativeLayout.LayoutParams Params=new RelativeLayout.LayoutParams(View.WRAP_CONTENT,View.WRAP_CONTENT); 
Params.addRule(RelativeLayout.CENTERINPARENT,View.TRUE); 
imageView.setLayoutParams(Params); 

Проблема с вашим в том, что она занимает весь экран в качестве макета корня, а затем раздуть вид изображения. Попробуйте использовать содержимое обертки, а затем добавьте правило

+0

Когда я использовал приведенный выше код с родителями соответствия для параметров, он оказался тем же. Но если я использую содержимое оболочки, он остается в центре, однако, когда я зажимаю, чтобы увеличить изображение, оно обрезается. – Petersicecream

+0

Да, хорошо. Я даже хочу ущипнуть масштаб в диалоговом окне. Просто сделайте отдельное окно. В противном случае откройте диалоговое окно и сделайте отдельный просмотр с сенсорными реализациями –