接上一篇文章:http://blog.csdn.net/kiritor/article/details/8926336

            上一篇文章提及了通过调用系统相册或拍照来实现图片的缩放\裁剪。不过这对于笔者项目的

         要求同样不适合,笔者需要的是通过对手机屏幕整个进行一个截图,并对这个截图进行裁剪操作。

         依靠系统功能确实可以实现图片的裁剪,但是不够灵活。这里笔者提供一种较为灵活的做法。

         但是这种做法的用户体验没有上篇文章的好,至于使用何种方法,读者应该自己衡量。

            同样,我们先看实际效果图。

              这里展示的是笔者项目的一小部分(阅读器):

             

           我们点击左下角的剪切按钮

             

            我们通过红色边框的四个角来控制裁剪的大小,移动红色框体来控制裁剪的位置区域。

             接下来我们看看源码的实现:

             首先点击剪切按钮的时候,我们应该生成一个Bitmap对象,传递给另一个Activty处理

             具体做法如下:  

cutP.setOnClickListener(new View.OnClickListener() {  			public void onClick(View v) { 				//将一些按钮隐藏 				cutP.setVisibility(View.INVISIBLE); 				mTopBarSwitcher.setVisibility(View.INVISIBLE); 				mPageSlider.setVisibility(View.INVISIBLE); 				back.setVisibility(View.INVISIBLE); 				mPageNumberView.setVisibility(View.INVISIBLE); 				View view = MuPDFActivity.this.getWindow().getDecorView(); 				if (false == view.isDrawingCacheEnabled()) { 					view.setDrawingCacheEnabled(true); 				} 				Bitmap bitmap = view.getDrawingCache(); 				ImageView imgv = new ImageView(MuPDFActivity.this); 				imgv.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 						LayoutParams.FILL_PARENT-200)); 				imgv.setImageBitmap(bitmap); 				backBitmap = bitmap; 				//传递给另一个Activity进行裁剪 				Intent intent = new Intent(); 				intent.setClass(MuPDFActivity.this, CutActivity.class); 				startActivity(intent);  			} 			 		});
             Tips:这里笔者是将这个截取的Bitmap对象传递给另一个Actvity做相关处理,这里如何

         在Activity之间进行Bitmap传递呢?这里我们简单的运用java语法特性来完成具体做法如下:

             我们在ActvityA中有一个public static Bitmap bitmap对象,当ActivityA跳转到B时,我们直接

         通过ActivityA.bitmap来获取这个对象。

             之后就是如何进行裁剪的操作了。操作在另一个Activity中进行。XML配置文件信息如下:  

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent"     android:layout_height="match_parent"     >   <com.artifex.mupdf.Crop_Canvas   		android:id="@+id/myCanvas"   		android:layout_width="fill_parent"   		android:layout_height="fill_parent" 	    android:background="#313131" 	    />     <Button          android:id="@+id/cutCancel"         android:layout_height="wrap_content"         android:layout_width="wrap_content"         android:text="取消"         android:layout_alignParentBottom="true"         android:layout_alignParentLeft="true"/>     <Button          android:id="@+id/cutEnsure"         android:layout_height="wrap_content"         android:layout_width="wrap_content"         android:text="确定"         android:layout_alignParentBottom="true"         android:layout_centerInParent="true"/>     <Button          android:id="@+id/toPDF"         android:layout_width="wrap_content"         android:layout_height="wrap_content"         android:text="ToPDF"         android:layout_alignParentBottom="true"         android:layout_alignParentRight="true"/> </RelativeLayout>
             通过配置文件可以看到我们自定义了一个View(ImageView)其实现如下:
package com.artifex.mupdf;  import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.Bitmap.Config; import android.graphics.drawable.BitmapDrawable; import android.util.AttributeSet; import android.view.MotionEvent; import android.widget.ImageView;  public class Crop_Canvas extends ImageView {  	private final static int PRESS_LB = 0;//表示左下角矩形框 	private final static int PRESS_LT = 1;//表示左上角矩形框 	private final static int PRESS_RB = 2;//表示右下角矩形框 	private final static int PRESS_RT = 3;//表示右上角矩形框  	private Bitmap bitMap = null;				//原始图片 	private RectF src = null;					//经过比例转换后的裁剪区域 	private RectF dst = null;					//图片显示区域,也就是drawBitmap函数中的目标dst 	private RectF ChooseArea = null;				//选择区域				 	private Paint mPaint = null;				//画笔 	private Matrix matrix = null;				//矩阵 	 	private int mx = 0;							//存储触笔移动时,之前