Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android自定義截屏功能,類似QQ截屏

Android自定義截屏功能,類似QQ截屏

編輯:關於Android編程

因為公司業務需求 需要對一個屏幕進行截屏,但自帶的截屏功能是遠遠不夠項目的功能需求 ,我們是做一個畫板軟件 ,需要的像QQ那樣截屏之後 ,可以看到我們自定義的工具,有畫筆,按鈕等等 。android自帶的功能非常簡單,只需要Intent隱式調用就完全足夠了,但他是系統的應用 ,界面固定,無法定制修改。實現方法跟辦法有很多種,下面記錄下我實現的方法 。我是這樣一個思路 ,重寫一個View組件 ,在OnDraw裡面只負責不畫圖形(包括半透明的四個矩形,亮框矩形,亮框上的四個小圓點),Ontouch方法是不停的去修改亮框 的坐標點。然後重新繪制 。

效果圖:

\
我是把這個圖片分解成下面這個圖的形狀的。我們在onTouch裡面就不停地去繪制矩形跟圓點。
\

具體代碼實現主要思路:

1、圖片繪制方法:
@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas); //不重寫 圖片無法出現
		if(mBitmap!=null){
//			drawNoLight(canvas);
			canvas.drawBitmap(mBitmap, iconLeft , iconTop, p_picture) ;
			//畫高亮的邊界
			drawRect(canvas) ;
			if(isDown)
				drawCircle(canvas) ;
		}
		
	}

2、圖片坐標改動方法:
@Override
	public boolean onTouchEvent(MotionEvent event) {
		
		int action = event.getAction() ;
		float x = event.getX() ;
		float y = event.getY() ;
		switch (action) {
		case MotionEvent.ACTION_DOWN:
			startX = x ;
			startY = y ;
			//需要判斷是在矩形的外邊還是裡面(判斷是移動還是縮放)
			if(x>lightRect.left+OFFSET && xlightRect.top+OFFSET && ylightRect.right+OFFSET || y>lightRect.bottom+OFFSET){
				isMove = false ;
				isScale = false ;
			}else {
				isMove = false ;
				isScale = true ; //縮放
				 point = getScalePoint(startX , startY);
			}
			if(!isScale)
				isDown = false ;
			break;
		
		case MotionEvent.ACTION_UP :
		case MotionEvent.ACTION_CANCEL:
			isDown = true ;
			break ;
			
		case MotionEvent.ACTION_MOVE:
		
			if(isMove){ 
				//移動
				float dx = x - startX ;
				float dy = y - startY ;
				moveLightRect(dx , dy) ;
				startX = x ;
				startY = y ;
				isDown = false ;
			}
			if(isScale){
				float dx = x - startX ;
				float dy = y - startY ;
				resetLightRect(dx , dy) ;
				startX = x ;
				startY = y ;
			}
			
			break ;

		default:
			break;
		}
		invalidate() ;
		return true;
	}

3、圖片截取的方法:
public Bitmap getBitmap (){
		int x = (int)(lightRect.left - iconLeft) ;
		int y = (int)(lightRect.top - iconTop) ;
		int w = lightRect.right - lightRect.left ;
		int h = lightRect.bottom - lightRect.top ;
		Bitmap bitmap = Bitmap.createBitmap(mBitmap, x, y, w, h) ;
		return bitmap ;
	}

PS:這個只是一個View 可以實現圖片的截取,這時我們需要加一些自定義的按鈕進來,就使用一個布局文件 ,把按鈕布置進去 。舉一個簡單的例子:

<frameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
   
    
    
    
        

*:關鍵類和關鍵的方法我放在我的資源裡,需要的朋友可以下載直接運行 看下效果。也可以看也這個Demo。 主要是ImageTailor.java這個類的實現 。有什麼建議請大家提出來 ,共同學習。 得意

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved