이글은 알게된 정보를 기록한 것입니다.

 참쓰잘데기 없는 일이라고 생각할수도  있겠지만 해보고 싶어서 계속 탐구해봤습니다.

보는 와중에 이상하게 한글 정보는 없었네요. 그래서 블로그에도 남깁니다.


Android 에서 Matrix 클래스에는 좌표 변환을위한 3x3 행렬이 있습니다. 

행렬로 구성되어 비트맵을 회전하거나 스케일 조정등에도 쉽게 이용이 가능합니다.

하지만 Matrix 로 만들어진 정보를 다시 x, y 좌표의 Rectangle 정보로 가져오기 위한 방법입니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
    private fun parseMatrix( matrix:Matrix, width:Int, height:Int ) : Array<PointF> {
        var values = FloatArray( 9 )
        matrix.getValues( values )
 
        var startPoint = PointF( values[2], values[5] )
        var rightTopPoint = PointF( width * values[0], width * values[3] )
        var bottomLeftPoint = PointF( height * values[1], height * values[4] )
        var bottomRightPoint = PointF( rightTopPoint.x + bottomLeftPoint.x, rightTopPoint.y + bottomLeftPoint.y)
 
        return arrayOf( startPoint
            , PointF( startPoint.x + rightTopPoint.x, startPoint.y + rightTopPoint.y )
            , PointF( startPoint.x + bottomLeftPoint.x, startPoint.y + bottomLeftPoint.y )
            , PointF( startPoint.x + bottomRightPoint.x, startPoint.y + bottomRightPoint.y ))
    }
cs


Matrix 의 배열값을 가져오면 위와같이 3x3 배열이 나옵니다.


| scaleX skewX transX | 
| skewY scaleY skewY | 
| pers0 pers1 pers2 |

scaleXhorizontal scale factor
skewXhorizontal skew factor
transXhorizontal translation
skewYvertical skew factor
scaleYvertical scale factor
transYvertical translation
pers0input x-axis perspective factor
pers1input y-axis perspective factor
pers2perspective scale factor


  trans 는 좌표 정보를 담고있고, scale 은 배율 정보,  skew 는 기울기에 대한 정보를 담고있습니다.

 Matrix 의 왼쪽 상단의 좌표 정보를 알고싶다면 transX, TransY 정보를 보면 되고,

 Matrix 의 오른쪽 상단의 좌표 정보를 알고싶다면 scaleX, skewY 정보를

 Matrix 의 왼쪽 하단의 좌표 정보를 알고싶다면 skewX, scaleY 정보를 보면 됩니다.


결국 3x3 배열 안에서 기준으로 값이 정의 되기 때문에 만약 100x100 이미지의 경우 각각 그 크기만 큼을 곱해주면

원하는 값을 알수있게 됩니다.









 참고 사이트.

https://docs.microsoft.com/en-us/dotnet/api/skiasharp.skmatrix?view=skiasharp-1.68.0

https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/graphics/skiasharp/transforms/matrix

https://skia.org/user/api/SkMatrix_Reference





 activity가 recreate 될때 freagment 도 destroy 됩니다.


 여기서 문제는 activity에 있는 fragment 포인터가 recreate시 달라지는 문제가 발생하게 될때


 setRetainInstance(true) 를 호출하여 recreate시 recreate하지 않도록 설정할수있습니다.


Android Studio 에서 push GCM 구현


1. 프로젝트를 생성.

.


2. build.gradle 에서 gcm 라이브러리를 import 합니다.


dependencies 안에 값을 넣습니다.


 compile 'com.google.android.gms:play-services:8.1.0'





3. class 파일을 생성하여줍니다.


 총 3개의 파일이 필요합니다.


화면구성과 값 등록시 필요한 MainActivity 와,


push가 왔을때 전달할 GcmBroadcastReceiver 클래스


push 받은이후 동작을 구성할 GcmIntentService 클래스가 필요합니다.




MainActivity


mainActivity에서는 푸시를 등록하는 역활을 해줍니다.




SENDER_ID 값에다가 등록한이후 클라이언트 ID값을 넣어주시면 됩니다.


그리고 등록한 이후에 쿠키값을 서버에 전달하여 주면 됩니다.


regId = gcm.register(SENDER_ID); 


 서버에서는 서버키 값과 regId 두가지 값으로 push를 하게 되기때문에,


regId값을 서버에 넣는 코드를 추가하시면 됩니다.



GcmBroadcastReceiver


GcmBroadcastReceiver는 단순이 값을 받아서 서비스쪽에 전달하는 역활을 하게됩니다.




GcmIntentService


GcmIntentService는 push가 왔을때에 행동을 취하게 됩니다.


현재 클래스는 단순히 값이 왔을때 Log.i를 찍는 행동을 하게 됩니다.





2. manifest 에서 권한을 추가합니다.






manifest 에서 리시버와 서비스를 추가합니다.




AndroidManifest.xml



이후 서버쪽에 서버 키값과 regId 값을 전달해주시면,


서버쪽에서 push를 하게되면 디바이스쪽으로 전달됩니다.



 기다리고 기다려도 오지 않아 PIN 번호 발급이 잘못됬나?


 한글로 주소를 입력해서 안오는건가?


 우편부아저씨가 아무도 없다고 그냥가셨나?


 별에 별생각을 다했었는데, 드디어 왔네요.


 저는 오는데 20일 정도 걸린것같습니다.




 이제야 겨우 지급 받을수있겠네요~~


 휴우


org.springframework.web.client.RestClientException: Could not extract response: no suitable HttpMessageConverter found for response type [tc.wo.mbseo.exchangediary.https.datas.TestData] and content type [text/html]

 몇일 동안 고생했던 오류 ㅠ




androidannotations 에서 rest templete 을 사용하는데 계속 이 오류 뜨는 경우.

서버에서 가져오는 값이 text/html 으로 오고 있기때문에 

GsonHttpMessageConverter 으로 변환할수 없기때문에 발생하는 오류입니다.



1. 텍스트에 대한 대응 추가.


이럴때에는 "converters =" 에서 
 
StringHttpMessageConverter.class 를 추가하여 텍스트에 대한 대응을 추가하면

리턴받는 값이 text 값으로 정상적으로 들어오게 됩니다.



2. server 에서 수정 하는 방법

 사실상 서버쪽에서 발생된 오류가 볼수있으며, json 포멧으로 넘기고 타입은 text/html 을 넘기기 때문에

발생된 것이므로 서버쪽에서 header 에서 추가해주면 됩니다.




3. android 쪽에서 수정하는 방법



 RestTemplate getRestTemplate();


 void setRestTemplate(RestTemplate restTemplate);


를 추가하여 template에 접근할수있도록 변경한이후,




GsonHttpMessageConverter 에서 파싱할수있는 타입을 추가해주시면 됩니다.




 http://devbible.tistory.com/160


style.xml 에 구현.

    <style name="DialogTheme" parent="android:Theme.Dialog">

   <item name="android:windowIsTranslucent">true</item>

   <item name="android:windowBackground">@android:color/transparent</item>

   <item name="android:windowContentOverlay">@null</item>

   <item name="android:windowNoTitle">true</item>

   <item name="android:windowIsFloating">true</item>

</style>






   <EditText 

       android:layout_width="match_parent"

       android:layout_height="match_parent"

       android:focusableInTouchMode="false"/>



 안드로이드 GCM PUSH 인증 받기 v.2015.06.16


 예전 방법밖에 없어 2015.06.16 에 현재 최신버전으로 다시 올립니다.



 1. 프로젝트 생성.

 

https://console.developers.google.com

경로로 이동하여 프로젝트를 생성합니다.





프로젝트 아이디를 입력하여 생성합니다.





프로젝트를 클릭하여 push 프로젝트로 이동합니다.




 API 로 이동합니다.







 Cloud Message for Android 로 이동







 API 사용 설정을 클릭하여 사용을 설정합니다.







사용이 완료되면 사용자 인증 정보로 이동합니다.




새키 만들기를 클릭하여 팝업띄운후 서버키를 선택합니다.



ip 주소는 선택사항이므로, 넣지 않아도 되기때문에 바로 만들기를 클릭하여 API 키를 생성합니다.





 여기까지가 서버에서 사용할수 있는 서버용 키를 생성하는 방법입니다.



 서버쪽에서 push 보낼때 아래와 같이 보내면 됩니다.


  $headers = array(

  'Authorization: key=' . 'AIzaSyBhhj2UKVHNqoN8PbkPWHBFVv************',

  'Content-Type: application/json'

 );




 이후 클라이언트쪽 key를 가져오기 위해서는 구글 서버스 쪽으로 이동합니다.


 https://developers.google.com/mobile/add





Pick a Platform 을 선택합니다.



  



플랫폼을 선택한 이후,





프로젝트를 선택합니다.






패키지를 입력해 줍니다.




이후  Choose and configure services 를 클릭하여 페이지를 이동한후,


 Cloud Messaging을 활성화합니다.






 CONTINUE TO

 Generate configuration files 를 클릭하여 이동하면,





 클라이언트에서 사용할수 있는 Sender Id를 가져올수 있습니다.


 클라이언트에서는 아래와 같이 사용 하시면 됩니다.


 regid = gcm.register("85770593****");




+ Recent posts

티스토리 툴바