and roid携帯電話は長いスクリーンの実例コードを切り取ります。


最近のプロジェクトでは、現在のページを携帯のアルバムに保存する必要があります。私はまだできないと思いました。大神さんの足跡を踏み、大神さんの足跡を踏んで、一緒に前に進みました。無駄話はさておき、記録しておいて、後期に勉強します。

 public class ScreenUtils {

/**
 *   scrollview   
 * @param scrollView
 * @return
 */
public static Bitmap getBitmapByView(ScrollView scrollView) {
  int h = 0;
  Bitmap bitmap = null;
  //   scrollview    
  for (int i = 0; i < scrollView.getChildCount(); i++) {
    h += scrollView.getChildAt(i).getHeight();
    scrollView.getChildAt(i).setBackgroundColor(
        Color.parseColor("#ffffff"));
  }
  //        bitmap
  bitmap = Bitmap.createBitmap(scrollView.getWidth(), h,
      Bitmap.Config.RGB_565);
  final Canvas canvas = new Canvas(bitmap);
  scrollView.draw(canvas);
  return bitmap;
}

/**
 *   listview
 * **/
public static Bitmap getListViewBitmap(ListView listView,String picpath) {
  int h = 0;
  Bitmap bitmap;
  //   listView    
  for (int i = 0; i < listView.getChildCount(); i++) {
    h += listView.getChildAt(i).getHeight();
  }
  //        bitmap
  bitmap = Bitmap.createBitmap(listView.getWidth(), h,
      Bitmap.Config.ARGB_8888);
  final Canvas canvas = new Canvas(bitmap);
  listView.draw(canvas);
  return bitmap;
}


/**
 *     
 * @param image
 * @return
 */
public static Bitmap compressImage(Bitmap image) {
  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  //       ,  100     ,          baos 
  image.compress(Bitmap.CompressFormat.JPEG, 100, baos);
  int options = 100;
  //                250K,      
  while (baos.toByteArray().length / 1024 > 1024 && options >10) {
    //   baos
    baos.reset();
    //     options%,          baos 
    image.compress(Bitmap.CompressFormat.JPEG, options, baos);
    //      10
    options -= 10;
  }
  //        baos   ByteArrayInputStream 
  ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());
  //  ByteArrayInputStream      
  Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);
  return bitmap;
}

/**
 *    sdcard
 * @param b
 * @return
 */
public static String savePic(Context context, Bitmap b) {

  File outfile = new File("/sdcard/image");
  //        ,        
  if (!outfile.isDirectory()) {
    try {
      outfile.mkdir();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  String fname = outfile + "/" + System.currentTimeMillis() + ".jpg";
  FileOutputStream fos = null;
  try {
    fos = new FileOutputStream(fname);
    if (null != fos) {
      b.compress(Bitmap.CompressFormat.JPEG, 90, fos);
      fos.flush();
      fos.close();
    }
  } catch (FileNotFoundException e) {
    e.printStackTrace();
  } catch (IOException e) {
    e.printStackTrace();
  }

  //             
  try {
    MediaStore.Images.Media.insertImage(context.getContentResolver(),
        outfile.getAbsolutePath(), fname, null);
  } catch (FileNotFoundException e) {
    e.printStackTrace();
  }
  //         
  context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + fname)));


  return fname;
   }
}
以上は百度の工具類です。
使用方法:

 ScreenUtils
   .savePic(XXXActivity.this,ScreenUtils.compressImage(ScreenUtils
      .getBitmapByView(XXXScrollView)));
はい、切り取りに成功しました。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。