2017-04-24 70 views
0

大家好我正在開發一個Gallery應用程序。 我已經實現了GridView並顯示來自server.when的圖像,當點擊該圖像時,它將打開一個對話框,並在對話框的底部包含viewpager和listview。在viewpager底部疊加listview並關注當前項目

根據viewpager位置圖像它也會順利滑動listview。

問題:我想在列表視圖上顯示疊加圖層,只顯示當前項目的焦點,其他項目看起來很模糊。

這裏是我的代碼

imagelist.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, final int i, long l) { 
      imagdialog = new Dialog(MainActivity.this); 
      imagdialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 

      imagdialog.setContentView(R.layout.imagelist); 
      imagdialog.setOnDismissListener(new DialogInterface.OnDismissListener() { 
       @Override 
       public void onDismiss(final DialogInterface arg0) { 
        // recreate(); 
        selectedAdapter = new Sadapter(getApplicationContext(), arraylist); 
        imagelist.setAdapter(selectedAdapter); 
       } 
      }); 


      photoid = arraylist.get(i).getId(); 
      Log.v("Photoid111", "" + photoid); 

      WindowManager.LayoutParams lp = new WindowManager.LayoutParams(); 
      lp.copyFrom(imagdialog.getWindow().getAttributes()); 
      lp.width = WindowManager.LayoutParams.MATCH_PARENT; 
      lp.height = WindowManager.LayoutParams.WRAP_CONTENT; 
      lp.gravity = Gravity.CENTER; 
      imagdialog.getWindow().setAttributes(lp); 
      viewpager = (ViewPager) imagdialog.findViewById(R.id.img); 
      final Button accept = (Button) imagdialog.findViewById(R.id.accept); 
      final Button reject = (Button) imagdialog.findViewById(R.id.reject); 
      final EditText cmnts = (EditText) imagdialog.findViewById(R.id.comnt); 
      ImageView closewin = (ImageView) imagdialog.findViewById(R.id.search_close_btn); 
      imglist = (RecyclerView) imagdialog.findViewById(R.id.imglist); 
      LinearLayoutManager sublimationmanager 
        = new LinearLayoutManager(imagdialog.getContext(), LinearLayoutManager.HORIZONTAL, false); 
      imglist.setLayoutManager(sublimationmanager); 
      cmnts.setText("" + arraylist.get(i).getCmnts()); 
      cmnts.setSelection(cmnts.getText().length()); 


      adaptor = new ViewPager_Adaptor(MainActivity.this, arraylist); 
      viewpager.setAdapter(adaptor); 
      viewpager.setCurrentItem(i); 
      img_adaptor = new Image_list(getApplicationContext(), arraylist); 
      imglist.setAdapter(img_adaptor); 
      imglist.smoothScrollToPosition(i); 
      pos = i; 

      viewpager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
       @Override 
       public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 
       } 

       @Override 
       public void onPageSelected(int position) { 
        photoid = arraylist.get(position).getId(); 
        Log.v("Photoid", "" + photoid); 
        cmnts.setText("" + arraylist.get(position).getCmnts()); 
        cmnts.setSelection(cmnts.getText().length()); 
        imglist.smoothScrollToPosition(position); 
        pos = position; 
       } 

       @Override 
       public void onPageScrollStateChanged(int state) { 
       } 
      }); 

      closewin.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        imagdialog.dismiss(); 
        selectedAdapter = new Sadapter(getApplicationContext(), arraylist); 
        imagelist.setAdapter(selectedAdapter); 
       } 
      }); 
      accept.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        comments = cmnts.getText().toString(); 
        Log.v("Photoid", "" + photoid); 
        Log.v("Photoid", "" + comments); 

        isInternetPresent = cd.isConnectingToInternet(); 
        if (isInternetPresent) { 
         mdialog = new Dialog(MainActivity.this); 

         mdialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 

         mdialog.setContentView(R.layout.custom_progress_dialog); 
         mdialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent); 
         mdialog.setCancelable(false); 

         mdialog.show(); 
         new Accept().execute(URL.amateurpath + "Accept"); 

        } else { 
         if (imagdialog.isShowing()) 
          imagdialog.dismiss(); 
         nonetwork.setVisibility(View.VISIBLE); 
         main_layout.setVisibility(View.GONE); 
         noimg.setVisibility(View.GONE); 
        } 

       } 
      }); 

      reject.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        comments = cmnts.getText().toString(); 
        isInternetPresent = cd.isConnectingToInternet(); 
        if (isInternetPresent) { 
         mdialog = new Dialog(MainActivity.this); 

         mdialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 

         mdialog.setContentView(R.layout.custom_progress_dialog); 
         mdialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent); 
         mdialog.setCancelable(false); 

         mdialog.show(); 
         new Reject().execute(URL.amateurpath + "Reject"); 
        } else { 
         if (imagdialog.isShowing()) 
          imagdialog.dismiss(); 
         nonetwork.setVisibility(View.VISIBLE); 
         main_layout.setVisibility(View.GONE); 
         noimg.setVisibility(View.GONE); 
        } 

       } 
      }); 
      imagdialog.show(); 

     } 
    }); 

這裏是我的Viewpager適配器

public class ViewPager_Adaptor extends PagerAdapter { 
    private Context context; 
    ArrayList<CustomImages> data; 
    private LayoutInflater layoutInflater; 

    public ViewPager_Adaptor(Context context, ArrayList<CustomImages> arraylist) { 
     // TODO Auto-generated constructor stub 
     this.context = context; 
     data = arraylist; 
     Log.d("Abhi", data.toString()); 
    } 

    @Override 
    public int getCount() { 
     // TODO Auto-generated method stub 
     Log.d("DATASIZE", String.valueOf(data.size())); 

     return data.size(); 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return (view == (LinearLayout) object); 
    } 

    @Override 
    public Object instantiateItem(ViewGroup container, final int position) { 

     layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View itemview = layoutInflater.inflate(R.layout.viewpager_img, container, false); 
     final ImageView iimg = (ImageView) itemview.findViewById(R.id.imageview1); 
     ImageView clockw = (ImageView) itemview.findViewById(R.id.clock); 

     ImageView anticlockw = (ImageView) itemview.findViewById(R.id.anticlock); 

     clockw.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       iimg.setRotation(iimg.getRotation() + 90); 

      } 
     }); 
     anticlockw.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       iimg.setRotation(iimg.getRotation() - 90); 

      } 
     }); 
     Picasso.with(MainActivity.this).load(data.get(position).getUrl().replaceAll(" ", "%20")).placeholder(R.drawable.temp_img).error(R.drawable.no_media).into(iimg); 
     iimg.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 

       Intent intnt = new Intent(MainActivity.this, ImageShow.class); 
       intnt.putExtra("photo", data.get(position).getPhoto()); 
       intnt.putExtra("url", data.get(position).getUrl()); 
       startActivity(intnt); 
      } 
     }); 


     container.addView(itemview); 
     return itemview; 
    } 

    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     container.removeView((LinearLayout) object); 
    } 
} 

最後列表視圖適配器如下

public class Image_list extends RecyclerView.Adapter<Image_list.MyViewHolder> { 
    ArrayList<CustomImages> arraylist1; 
    Context c; 

    public Image_list(Context c, ArrayList<CustomImages> arraylist) { 
     this.arraylist1 = arraylist; 
     this.c = c; 
    } 

    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.inflate_image_list, parent, false); 
     return new MyViewHolder(itemView); 
    } 

    @Override 
    public void onBindViewHolder(final MyViewHolder holder, final int position) { 
     Log.v("Position of i", "" + pos); 
//   if (pos == position) { 
//    holder.img.setBackgroundResource(R.drawable.border); 
//   } else { 
// 

//}

 Picasso 
       .with(this.c) 
       .load(arraylist1.get(position).getUrl().replaceAll(" ", "%20")) 
       .placeholder(R.drawable.temp_img) // can also be a drawable 
       .placeholder(R.drawable.temp_img) 
       .error(R.drawable.no_media) 
       .into(holder.img); 
    } 

    @Override 
    public int getItemCount() { 
     return arraylist1.size(); 
    } 

    public class MyViewHolder extends RecyclerView.ViewHolder { 
     public ImageView img; 

     public MyViewHolder(View view) { 
      super(view); 
      img = (ImageView) view.findViewById(R.id.catimg); 
      view.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        int position = getLayoutPosition(); 

        viewpager.setCurrentItem(position); 
       } 
      }); 
     } 
    } 
} 

問題:我想在listview上顯示疊加圖層,只顯示當前項目的焦點,其他項目看起來像模糊。

由於擔心問題,我設法根據viewpager幻燈片列表滑動,但我想顯示blurissh圖像,並只聚焦在viewpager中顯示的listview中的一個圖像。從每當一個項目在viewPager選擇獲得該項目的位置,這顯示在viewpager

回答

1

在屏幕的右側列表

而且顯示圖像。將該項目的位置保存在適配器中的變量viewPagerPosition中。然後通過調用notifyDataSetChanged()來刷新適配器。

在適配器具有一定的透明度觀點,並認爲可見的default.In適配器的onBindViewHolder檢查

if(position = viewPagerPosition){ 
    transparentView.setVisibility(GONE); 
} else{ 
    transparentView.setVisibility(VISIBLE); 
} 

這應該在當前視圖亮,其它變暗。如果你想模糊,那麼你可以在相同的條件下使用模糊。

+0

我應該在哪裏寫notifydatasetchanged –

+0

從viewItem的onPageChangeListener調用notifydatasetchanged onItemSelected – bpr10

+0

這是否解決了您的問題? – bpr10

相關問題