2016-05-15 82 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

当我将上面的代码用于params的父类匹配时,它结束了。但是,如果我确实使用包装内容,它确实留在中心,但是当我缩小图像时会被裁剪。 – Petersicecream

+0

是的,它会。你是否还想捏对话框中的缩放?只需制作一个单独的窗口。否则抛弃对话并通过触摸实现进行单独的视图 –