Android自訂截屏功能,類似QQ截屏,android截屏

來源:互聯網
上載者:User

Android自訂截屏功能,類似QQ截屏,android截屏

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

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


具體代碼實現主要思路:

1、圖片繪製方法:
@Overrideprotected 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、圖片座標改動方法:
@Overridepublic 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 && x<lightRect.right -OFFSET && y>lightRect.top+OFFSET && y<lightRect.bottom -OFFSET){//是移動的狀態isMove = true ;isScale = false ;}else if(x<lightRect.left-OFFSET || y<lightRect.top-OFFSET || x>lightRect.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   可以實現圖片的截取,這時我們需要加一些自訂的按鈕進來,就使用一個布局檔案 ,把按鈕布置進去 。舉一個簡單的例子:
<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="horizontal" >       <com.example.imagedemo.ImageTailor        android:id="@+id/tailor"        android:layout_width="match_parent"        android:layout_height="match_parent"         />        <LinearLayout         android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginLeft="8dp"        android:layout_marginRight="8dp"        android:layout_gravity="bottom"        >        <Button        android:id="@+id/complete"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="right"        android:text="完成"        />        <Button             android:id="@+id/cancel"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="right"        android:text="取消"        />            </LinearLayout>    </FrameLayout>

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


My Phone,QQ截屏,為何只可以在QQ裡可以截屏,在別的功可以與介面就不行

沒有root許可權,而且我發現即便有root許可權QQ在QQ以外也很費勁,至少我的平板電腦是這樣
 
手機QQ21(Android)的截屏功可以怎使用也就是 設定我找不到在那裡

開啟 設定與協助 往下拉有個 開啟截屏功能, 把後邊的框選上,然後在QQ介面是搖晃手機就可以截屏了。然後在後台運行QQ時要的話需要手機已經取得root許可權才能用。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.