2014-10-04 37 views
2

我的代碼如下截圖:安卓:以所選區域編程

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button upload = (Button) findViewById(R.id.screeshotdButton); 

    upload.setOnClickListener(new Button.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      folderCheck(); 
     } 
    }); 
} 
private void folderCheck(){ 
    File folder = new File(Environment.getExternalStorageDirectory() + "/cloze_screenshots"); 
    boolean success = true; 
    // If the folder cloze not exist, create one 
    if (!folder.exists()) { 
     success = folder.mkdir();  
    }else{ 
     ScreenShot(); 
    } 
    // If mkdir successful 
    if (success) { 
     ScreenShot();  
    } else { 
     Log.e("mkdir_fail","QQ"); 
    } 

} 

private void ScreenShot(){ 

    String filePath = Environment.getExternalStorageDirectory()+ "/cloze_screenshots/temp.png"; 

    // create bitmap screen capture 
    Bitmap bitmap; 
    View v1 = getWindow().getDecorView().getRootView(); 
    v1.setDrawingCacheEnabled(true); 
    bitmap = Bitmap.createBitmap(v1.getDrawingCache()); 
    v1.setDrawingCacheEnabled(false); 

    OutputStream fout = null; 
    File imageFile = new File(filePath); 

    try { 
     fout = new FileOutputStream(imageFile); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fout); 
     fout.flush(); 
     fout.close(); 
     Toast.makeText(this, "Success", Toast.LENGTH_LONG).show(); 

    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

該代碼可以全屏截圖,但我想借此對特定區域的截圖(例如,左塊在屏幕上)按下按鈕後編程。任何代碼或建議將不勝感激。

回答

3

您可以將內容封裝在佈局中,例如LinearLayout,並按照上面的代碼使用包裝佈局上的方法進行截圖。

Bitmap bitmap; 
ViewGroup v1 = findViewById(R.id.layout_id); 
v1.setDrawingCacheEnabled(true); 
bitmap = Bitmap.createBitmap(v1.getDrawingCache()); 
v1.setDrawingCacheEnabled(false); 
+0

謝謝!這對我有用。 – hiein2003 2014-10-11 03:43:11

0

下面方法採用給定視圖的快照它是由高度進行調節和寬度然後返回它的位圖

public static Bitmap takeSnapshot(View givenView, int width, int height) { 
Bitmap bm = Bitmap.createBitmap(width , height, Bitmap.Config.ARGB_8888);     
Canvas snap = new Canvas(bm); 
givenView.layout(0, 0, givenView.getLayoutParams().width, givenView.getLayoutParams().height); 
givenView.draw(snap); 
return bm; }