Source code has been uploaded. Link: http://download.csdn.net/detail/huangyabin001/7556825click to open the link
Package com. example. copyfree; import android. app. actionBar; import android. app. activity; import android. app. alertDialog; import android. app. alertDialog. builder; import android. content. dialogInterface; import android. content. dialogInterface. onClickListener; import android. OS. bundle; import android. OS. handler; import android. OS. message; import android. text. textUtils; import android. text. method. hideReturnsTransf OrmationMethod; import android. util. typedValue; import android. view. gestureDetector; import android. view. menu; import android. view. menuItem; import android. view. motionEvent; import android. view. scaleGestureDetector; import android. view. view; import android. widget. editText; import android. widget. textView; import android. widget. toast; public class CopyFreeActivity extends Activity {private static final String TAG = "SelectTextToCopyActivity"; private float mScaleFactor = 1; private comment mScaleDetector; private GestureDetector mGestureDetector; private TextView text; private EditText edit; private static final int ZOOM_IN = 4; private static final int ZOOM_OUT = 5; private final int MAX_ZOOM_IN_SIZE = 60; private final int MAX_ZOOM_OUT_SIZE = 20; private final int THE_SIZE_OF_PER_ZOOM = 9; private Float mTextSize = 27; private int mZoomMsg =-1; @ Overrideprotected void onCreate (Bundle savedInstanceState) {super. onCreate (savedInstanceState); setContentView (R. layout. activity_copy_free); initUi () ;}@ Overridepublic boolean onCreateOptionsMenu (Menu menu) {return true;} public void button (View view) {if (TextUtils. isEmpty (edit. getText () {Toast. makeText (this, "Enter the test content! ", 0 ). show ();} elsetext. setText (edit. getText () ;}@ Overridepublic boolean onSearchRequested () {return false ;}@ Overridepublic boolean onOptionsItemSelected (MenuItem item) {switch (item. getItemId () {case android. r. id. home: AlertDialog. builder dialog = new AlertDialog. builder (this); dialog. setTitle ("Exit "). setIcon (android. r. drawable. btn_star ). setMessage ("quit the program now? "). SetPositiveButton ("OK", new OnClickListener () {@ Overridepublic void onClick (DialogInterface dialog, int which) {CopyFreeActivity. this. finish ();}}). setNegativeButton ("cancel", new OnClickListener () {@ Overridepublic void onClick (DialogInterface dialog, int which) {dialog. cancel ();}}). show (); break;} return super. onOptionsItemSelected (item);} private void initUi () {text = (TextView) findViewById (R. id. text ); Edit = (EditText) findViewById (R. id. edit); text. setTransformationMethod (HideReturnsTransformationMethod. getInstance (); text. setTextIsSelectable (true); mScaleDetector = new ScaleGestureDetector (this, new MyScaleListener (); mGestureDetector = new GestureDetector (this, new GestureDetector. simpleOnGestureListener () {}); mGestureDetector. setOnDoubleTapListener (null); ActionBar actionBar = getActionBar (); CtionBar. setDisplayHomeAsUpEnabled (true);} private Handler mUiHandler = new Handler () {@ Overridepublic void handleMessage (Message msg) {switch (msg. what) {case ZOOM_IN: zoomIn (); text. invalidate (); break; case ZOOM_OUT: zoomOut (); text. invalidate (); // After modifying the TextView, call this method to refresh the TextView. Break; default: break ;}}; private void zoomIn () {mTextSize = mTextSize + THE_SIZE_OF_PER_ZOOM <= MAX_ZOOM_IN_SIZE? MTextSize + THE_SIZE_OF_PER_ZOOM: MAX_ZOOM_IN_SIZE; if (mTextSize> = MAX_ZOOM_IN_SIZE) {mTextSize = MAX_ZOOM_IN_SIZE;} text. setTextSize (TypedValue. COMPLEX_UNIT_PX, mTextSize);} private void zoomOut () {mTextSize = mTextSize-THE_SIZE_OF_PER_ZOOM <MAX_ZOOM_OUT_SIZE? MAX_ZOOM_OUT_SIZE: mTextSize-THE_SIZE_OF_PER_ZOOM; if (mTextSize <= MAX_ZOOM_OUT_SIZE) {mTextSize = MAX_ZOOM_OUT_SIZE;} text. setTextSize (TypedValue. COMPLEX_UNIT_PX, mTextSize);} private class MyScaleListener extendsScaleGestureDetector. simpleOnScaleGestureListener {@ Overridepublic boolean onScale (ScaleGestureDetector detector) {float scale = detector. getScaleFactor (); if (scale <0.999999 | scale> 1.00001) {mScaleFactor = scale;} return true ;}@ Overridepublic boolean onScaleBegin (ScaleGestureDetector detector) {return true ;} @ Overridepublic void onScaleEnd (ScaleGestureDetector detector) {float scale = detector. getScaleFactor (); if (mScaleFactor> 1.0) {mZoomMsg = ZOOM_IN;} else if (mScaleFactor <1.0) {mZoomMsg = ZOOM_OUT ;}} public boolean onInterceptTouchEvent (MotionEvent ev) {mScaleDetector. onTouchEvent (ev); final int action = ev. getAction (); switch (action) {case MotionEvent. ACTION_DOWN: mGestureDetector. onTouchEvent (ev); return false; case MotionEvent. ACTION_MOVE: mGestureDetector. onTouchEvent (ev); return false; case MotionEvent. ACTION_UP: mGestureDetector. onTouchEvent (ev); Message msg = Message. obtain (); msg. what = mZoomMsg; mUiHandler. sendMessage (msg); mZoomMsg =-1; return false;} return true;} public boolean onTouchEvent (MotionEvent ev) {mScaleDetector. onTouchEvent (ev); final int action = ev. getAction (); switch (action) {case MotionEvent. ACTION_DOWN: mGestureDetector. onTouchEvent (ev); return true; case MotionEvent. ACTION_MOVE: mGestureDetector. onTouchEvent (ev); return true; case MotionEvent. ACTION_UP: mGestureDetector. onTouchEvent (ev); Message msg = Message. obtain (); msg. what = mZoomMsg; mUiHandler. sendMessage (msg); mZoomMsg =-1; return true; case MotionEvent. ACTION_CANCEL: mGestureDetector. onTouchEvent (ev); return true; default: if (mGestureDetector. onTouchEvent (ev) {return true;} return true ;}@overrideprotected void onDestroy () {super. onDestroy (); mUiHandler. removeCallbacksAndMessages (null );}}