2017-12-04 6 views
1

私が達成しようとしているのは、画面の周りをドラッグできるビューを使って特定のエリアをスクリーンショットしたいと思っているだけで、そのビューがホバリングしているものは、ドラッグされたビュー特定のエリアのスクリーンショットを撮る

私は何をやるべきか、どこから始めようとしているのかを調べてきましたが、最初のアイデアはスクリーンショットを作成して、必要なものを得ることです。

SCREENSHOT --> GET IMAGE --> CROP IMAGE以外の方法があります。ビューを取得し、必要なものだけを画面にキャプチャすることは可能ですか?

+0

あなたはあなたのビューを超えるクロッパーフレームを描画する必要があります。その後、全体のビューのdrawaingCacheを取得し、その時点であなたのクロップフレームの座標を持つようにその部分をカットします。 – ADM

答えて

0

import android.graphics.Bitmap; 
 
import android.graphics.Canvas; 
 
import android.os.Environment; 
 
import android.support.v7.app.AppCompatActivity; 
 
import android.os.Bundle; 
 
import android.util.Log; 
 
import android.view.View; 
 
    
 
import java.io.File; 
 
import java.io.FileOutputStream; 
 
import java.util.Random; 
 
    
 
public class MainActivity extends AppCompatActivity { 
 
    
 
    @Override 
 
    protected void onCreate(Bundle savedInstanceState) { 
 
     super.onCreate(savedInstanceState); 
 
     setContentView(R.layout.activity_main); 
 
    
 
     Bitmap bitmap = loadBitmapFromView(findViewById(R.id.activity_main),350,450); 
 
     saveImage(bitmap); 
 
    } 
 
    
 
    public static void saveImage(Bitmap bitmap){ 
 
     String root = Environment.getExternalStorageDirectory().toString(); 
 
     File myDir = new File(root + "/req_images"); 
 
     myDir.mkdirs(); 
 
     Random generator = new Random(); 
 
     int n = 10000; 
 
     n = generator.nextInt(n); 
 
     String fname = "Image-" + n + ".jpg"; 
 
     File file = new File(myDir, fname); 
 
     // Log.i(TAG, "" + file); 
 
     if (file.exists()) 
 
      file.delete(); 
 
     try { 
 
      FileOutputStream out = new FileOutputStream(file); 
 
      bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out); 
 
      out.flush(); 
 
      out.close(); 
 
     } catch (Exception e) { 
 
      e.printStackTrace(); 
 
     } 
 
    } 
 
    
 
    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

お返事ありがとうございました。私はあなたのコードを試しましたが、残念ながら、私はそれを動作させることができませんでした。何も表示されません。 –

関連する問題