최신 글
안드로이드
플러터
알고리즘
인기글
-
플러터 플러터의 위젯 (1) - Container, Child, Children 플러터의 모든 것은, 그 앱 자체를 포함해서, 위젯이다. 이러한 모양의 위젯은, 이러한 트리로 구성된다. Container의 하위로 위젯을 넣으려면 child이나 children에 넣어주면 된다. 이름에서 알수 있듯이, 하나만 넣으려면 child, 여러개면 children이다. A child property if they take a single child – for example, Center or Container A children property if they take a list of widgets – for example, Row, Column, ListView, or Stack. (https://flutter.dev/docs/development/ui/layout 에서 발췌) 여기서 알 수 ..
-
안드로이드 헤더가 찰싹 달라 붙는 스크롤 뷰 (Sticky Scroll View) Fixed view in scroll view 네이버 앱을 보면 이렇게, 검색창이 위로 올라가다가 맨 위에 도달하면 더이상 올라가지 않고 고정이 된다. 실제로 네이버 앱 내부적으로는 CollapsingToolbarLayout을 이용하고 있을 수도 있다. 하지만, 만약 단순히 뷰를 고정시키기만 하고싶거나, 툴바는 다른 이유로 따로 쓰고 싶을 경우에는 CollapsingToolbarLayout를 사용하지 못한다. 그래서 이번에는 스크롤 뷰 내부의 임의의 뷰를 천장에 찰싹 달라 붙게 하는 커스텀 뷰를 만들어 보기로 하자. 전체 코드는 https://github.com/5seunghoon/Sticky_Scroll_View_Example 에 있고, 이번에는 https://github.com/amarjain07/S..
-
안드로이드 안드로이드 Picture In Picture (PIP) 깃 헙 주소 : https://github.com/5seunghoon/PipExample PIP기능은 아래와 같다 이렇게 재생되던 동영상을, 홈키같은걸 눌리게 되면 이렇게 작은화면으로 전환되고, 다른 앱 위에서 동영상이 계속 재생될 수 있는 기능이다. 유튜브나 네이버TV등에서 자주 볼 수 있는 기능이다. 이를 간단하게 구현해보자. 먼저 깃헙 주소는 게시글의 최상단에 미리 적어놓았다. 1. 매니패스트의 액티비티 부분을 다음과 같이 수정하자 보면, android:resizeableActivity과 supportPictureInPicture이 설정되어 있는 것을 알 수 있다. 2. 액티비티 xml 수정 먼저 VideoView를 리니어 레이아웃의 최상단에 두고, 스크롤뷰를 그 밑에 둔 다음 그 스크롤뷰에 이것저..
-
플러터 Flutter - 현재 위젯 캡쳐(캡처) 현재 위젯을 캡쳐하는 방법을 알아보자. 안드로이드였다면 onDraw를 썼을테지만.. 플러터엔 그런거 없다..! 다만, renderObject를 활용하면 된다. 전체 소스 코드는 https://github.com/5seunghoon/Flutter_Capture_Example 여기에 있다. 1. 먼저 import부터. import 'dart:io'; import 'dart:async'; import 'dart:ui' as ui; import 'dart:typed_data'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; import 'pac..
- 안드로이드 Android studio code coverage시 Robolectric 사용할 때 ComplexColor 부분 에러 해결 안드로이드 스튜디오에서 Code Coverage측정할 때 Robolectric이랑 함께 쓰면 아래와 같은 오류가 뜰 수 있다 ---- IntelliJ IDEA coverage runner ---- sampling ...include patterns:exclude patterns:java.lang.VerifyError: Bad return typeException Details: Location: android/content/res/ResourcesImpl.$$robo$$loadComplexColorForCookie(Landroid/content/res/Resources;Landroid/util/TypedValue;ILandroid/content/res/Resources$Theme;)Landroid/con..
-
잡다한 코딩 [openGL][python3] 미니멀 태양계 결과물은 위와 같다. 태양, 지구, 명왕성, 그리고 지구를 회전하는 인공위성이 있다. 인공위성은 공전축이 매 회전마다 조금씩 바뀌고 명왕성은 공전궤도가 타원이다. 왼쪽위부터 태양계 전체를 보는 화면, 태양에서 12시 방향의 우주, 명왕성에서 본 지구, 지구의 한국에서 본 하늘 을 표현하고 있다. constant.py는 전역변수들을 저장하고 있다. 물론 이것도 과제다. main.pyfrom OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * from constant import * import math def drawSatellite(): global satelliteRevolveAxisCount global satelliteNowX..
-
잡다한 코딩 [하드웨어] STM32를 이용한 방공시스템 제작 울학교에서 이번 학기에 내가 진행한 프로젝트이다. 통틀어서 1등을 먹었는데, 기록해두면 나중에 면접이든 뭐든 쓸모가 있지 않을까 싶어서 이렇게 기록으로 남겨둔다. 또 혹시 아는가 내 후배들이 내 글을 보고 도움을 받을지... 일단 전체 코드부터 올린다. ↓클릭시 다운 #include "misc.h" #include "stm32f10x.h" #include "stm32f10x_exti.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "stm32f10x_dma.h" #include "stm32f10x_usart.h" #include "stm32f10x_adc.h" #include "lcd.h" #include "Touch.h" #incl..
- 플러터 플러터 - Status bar만 남기고 App bar는 지우기 Appbar를 지우려고 return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, ), home: Scaffold( appBar: new AppBar(), body: Center( child: Text("Hi"), )), ); 이런 코드에서 appbar만 지우면 쓸대없게도 status bar도 같이 사라진다. 이럴땐, primary: true, appBar: EmptyAppBar(), body: Center( child: Text("Hi"), )); 이런식으로 EmptyAppBar를 넣어주고, class EmptyAppBar extends StatelessWidget implements PreferredS..
-
플러터 간단한 플러터 앱 - 2초마다 한번씩 랜덤한 이름 만들기 플러터를 처음 공부하게 되면 하게 되는 튜토리얼의 앱인 "랜덤 이름 제네레이터" 구글 코드 랩에 나와있는 이 앱을 간단하게 개선해보면서 Stream의 사용법을 익혀봅시다. https://codelabs.developers.google.com/codelabs/first-flutter-app-pt2/#8 이 링크를 통해 "랜덤 이름 제네레이터"를 만들어 보았다는 가정 하에 글을 써보겠습니다. 자 그럼, 우리는 이 앱을 기반으로 기능 하나를 추가해 보도록 합시다. 추가해볼 기능은 바로, 제목에도 나와있듯이, 랜덤한 이름을 2초마다 한번씩 제네레이팅하는 기능입니다. 일단, Dart의 Stream에 대해 알아보기 전에, https://software-creator.tistory.com/13?category=681..
- 안드로이드 RxJava와 Room DB 자기 전, 갑자기 생각나서 정리를 해야할 것 같아서 쓰는 ROOM DB와 RxJava의 조합 에 관한 글. Room DB는 Andriod Jetpack에 포함된 SQLite를 대체하는 데이터베이스이다. 특징으로는, 간단한 insert, update, delete 등등의 기본적인 함수를 SQL문을 이용하여 적지 않아도 된다는게 큰 특징이다. 사용해보면 알겠지만 SQLite와 DBHelper를 쓰는 등의 기존 방식보다 훨씬 편리하고 마음이 놓인다는 장점이 있다. 마음이 놓인다는 이유는.. 제가 DB지식이 적어서 SQL문이 오류날까봐 항상 전전긍긍하는데 SQL문을 덜 적어도 되기 때문.. 이다... ㅋㅋㅋ 또한 특징이 하나 더 있는데, RxJava를 연동해서 쓸 수 있다는 점이다. 예를들어, DB에서 getU..
-
안드로이드 Android Kotlin MVVM패턴으로 간단한 검색 앱 만들기 - 3. RxJava + Retrofit를 통한 네트워킹 및 옵저빙 이번 글에서는 Retrofit으로 네트워크 통신을 하고 그 결과값을 RxJava로 받아오는 과정을 수행해보겠습니다. 일단 Retrofit에 대해 간단히 알아보도록 하죠. Retrofit 저도 최근에 알았는데, 레트로핏 한글 문서가 있더라구요. http://devflow.github.io/retrofit-kr/ 길지 않으니 한번 정독하셔도 됩니다. 간단하게 레트로핏을 요약하자면 public interface GitHubService { @GET("/users/{user}/repos") Call listRepos(@Path("user") String user);} 이렇게 인터페이스 형태의 서비스를 먼저 만듭니다. 자바 어노테이션으로 @Get이나 @Post 등을 적어주고, 파라미터로 라우팅 정보를 적어줍니다...
-
안드로이드 androidx view.doOnLayout androidx의 view.doOnLayout에 대해 짧게 글을 써본다 공식 문서에는 이렇게 되어있다 레이아웃이 놓여졌을 때 주어진 액션을 수행. 뷰의 포지션을 구하고 싶을 때 (Kotlin)my_image_view.run{ doOnLayout { getLocationOnScreen(startPos) Logger.d("start dot rect : ${startPos[1]}") } }와 같이 하면 된다 onWindowFocusChanged() 를 사용하면 안드로이드 멀티뷰를 쓸 때 좀 이상해진다. 호출이 약간 늦거나 이르거나.. 저걸 쓰면 잘됨
-
잡다한 코딩 Webstorm 이용한 Spring boot + Vue.js 연동 정말 간단하다 spring boot 프로젝트에 src나 target과 같은 경로에 frontend폴더를 만들고 거기에 vue.js프로젝트가 들어가게 한다 그러니까, 그냥 프로젝트 만들때부터 이렇게 만들면 된다 (Users/venditz/Document/IdeaProject/springpractice04 가 스프링 프로젝트 폴더) 그러면 아래와 같은 프로젝트 구성이 된다 그 후에 frontend/config/index.js에서 빌드 부분을 이렇게 바꿔준다 그리고 터미널이든 cmd이든 frontend 폴더로 이동한 뒤 npm run build 해주면 이런게 뜬다 그럼 이제 아무것도 없던 src/main/resouces 폴더에 이러한 index 파일이 생성될거다 그럼 끝! 이제 스프링부트를 실행하고 127.0..
- 알고리즘 백준 1315 RPG 백준 1315 RPG C++17의 auto && [a, b, c] = tuple t; 구문을 적극 활용 solve(i,j)는 str가 i, int가 j일 때, 이 이후로 내가 깰 수 있는 최대갯수의 퀘스트 이다. solve(i,j)에서 현재 스텟에서 깰 수 있는 퀘스트 갯수를 새고그 퀘스트를 깻다고 표시한 뒤깰 수 있는 퀘스트들의 포인트들의 합으로 스탯을 배분하여solve()를 재귀로 호출한다. 이때, 재귀로 들어오기 전에 깻던 퀘스트들은 또다시 깨면 안되기 때문에 깨지 않은 퀘스트만 깨고, 다시 위에서 설명한 것처럼 퀘스트 포인트 합으로 스탯 배분 후 다시 재귀 호출을 한다 그리고 재귀호출이 모두 끝나서 리턴하여 본래 함수로 되돌아 오면스탯을 배분한 수많은 상황중에서 가장 많이 깰 수 있는 퀘스트의 갯..
- 알고리즘 백준 11062 카드게임 백준 11062 카드게임 solve(i,j)는 i에서 j까지의 카드(i와j는 인덱스)만 남았을 때,""지금 상황에서"" = end) { if ((N - (start + end)) % 2) return ret = card[start]; else return ret = 0; } if ((N - (start + end)) % 2){ ret = max((solve(start + 1, end) + card[start]), (solve(start, end - 1) + card[end])); } else { ret = min((solve(start + 1, end)), (solve(start, end - 1))); } return ret; } int main() { scanf("%d", &testcase); whil..
- 안드로이드 Uri에서 썸네일 가져오기 첫번째 함수: Uri에서 rowID를 추출 두번째 함수 : rowID를 통해 썸네일 추출 처음 if문은 무언가 잘못되어서 항목이 없을 때, 두번째 else if 문은 썸네일이 정상적으로 있어서 정상적으로 리턴할 때, 마지막 else문은 "썸네일이 존재하지 않을 때" 진입 함. public Uri thumbnailURIFromOriginalURI(Uri selectedImageUri) { long rowId = Long.valueOf(selectedImageUri.getLastPathSegment()); return uriToThumbnail(""+ rowId); } public Uri uriToThumbnail(String imageId) { String[] projection = { MediaStore..