2014-09-26 28 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