2014-09-26 64 views
3

我只需要一個屏幕截圖作爲我的ListView的位圖。我無法弄清楚如何做到這一點。屏幕的位圖不是用來模糊它,而是將其設置爲另一個片段中的背景。 我從哪裏截圖? BaseAdapter或我的片段,其中包含ListView? 或在單擊ListView中的項目後打開的新片段?列表視圖的屏幕截圖並將其轉換爲位圖

更新: 從我的New Fragment調用ViewTreeObserver中的方法。方法loadBitmapFromView完美。我現在的問題是我不知道如何獲得我想要的圖片從ListView。我使用的參數mContainer,mContainer.getWidth(),mContainer.getHeight()應該更改爲我的ListView中的參數。 (該PARAMS現在是形成用於測試目的的新片段)

private void applyBlur() { 

    mContainer.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { 
     @Override 
     public boolean onPreDraw() { 
      mContainer.getViewTreeObserver().removeOnPreDrawListener(this); 
      mContainer.buildDrawingCache(); 

      blur(MOKListViewFragment.loadBitmapFromView(mContainer,mContainer.getWidth(),mContainer.getHeight()), mContainer); 
      return true; 
     } 
    }); 
} 

這是我叫我的新片段,從我這其實我是想從我的圖片中的ListView BaseAdapter。

ImageView imageView = (ImageView) rowView.findViewById(R.id.thumb_button_1); 
      imageView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        MOKPagerFragment pagerFragment = new MOKPagerFragment(); 
        FragmentTransaction fragmentTransaction = ((Activity) mContext).getFragmentManager().beginTransaction(); 
        fragmentTransaction.setCustomAnimations(R.anim.fade_in, R.anim.fade_out); 
        fragmentTransaction.add(R.id.fragment_container, pagerFragment); 
        fragmentTransaction.addToBackStack(null); 
        fragmentTransaction.commit(); 
       } 
      }); 

對不起,如果這是令人困惑。

+1

看到這個鏈接http://stackoverflow.com/questions/12742343/android-get -screenshot-of-all-listview-items?rq = 1 – 2014-09-26 11:59:26

+0

我認爲這比我需要的更多。我不需要包含所有未顯示項目的屏幕截圖。只需要ListView的當前狀態的屏幕截圖,以便爲背景目的模糊該位圖。 – 2014-09-26 12:10:29

回答

1

Fragment which contains the ListView採取截圖,使用此代碼採取截圖:

public static Bitmap loadBitmapFromView(View v, int width, int height) { 
    Bitmap b = Bitmap.createBitmap(width , height, Bitmap.Config.ARGB_8888);     
    Canvas c = new Canvas(b); 
    v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height); 
    v.draw(c); 
    return b; 
} 
+0

謝謝,我會試試看。我如何從我的新片段調用這個方法來獲取位圖? (對不起,新的android和編程) – 2014-09-26 12:05:47

+0

'loadBitmapFromView(視圖v,int寬度,int高度)'需要3個參數,1)查看對象(視圖誰是你想要的截圖,這裏是ListView),2)圖像的寬度,3)圖像的高度。如果你想採取整個列表視圖的截圖,請參閱此[SO帖子](http://stackoverflow.com/a/12956881/3326331) – 2014-09-26 12:08:46

+0

不知怎的,我得到這個錯誤java.lang.IllegalArgumentException:寬度和高度必須是> 0.不知道如果我做對了。 – 2014-09-26 12:29:23

0
if your phone is rooted try this 

Process sh = Runtime.getRuntime().exec("su", null,null); 

       OutputStream os = sh.getOutputStream(); 
       os.write(("/system/bin/screencap -p " + "/sdcard/img.png").getBytes("ASCII")); 
       os.flush(); 

       os.close(); 
       sh.waitFor(); 

然後讀img.png爲位圖和JPG如下從

Bitmap screen = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory()+ File.separator +"img.png"); 

now you can use screen bitmap 

refrence將其轉換here