안드로이드에서 페인팅 캔버스 응용 프로그램을 개발할 때, 나는 모든 점을 추적해야하고 다른 캔버스에서 다시 그려야합니다. 이제 모든 포인트를 추적 할 수 있지만 그리기 및 다시 그리기의 경우 포인트 드로잉을 동기화하는 방법을 알지 못합니다. 즉, 사용자는 드로잉에서와 같이 같은 간격으로 포인트를 다시 그려야합니다. 내가 어떻게 이걸 얻을 수 있니?Android, 그리기 캔버스에서와 같은 시차로 점을 다시 그리는 방법은 무엇입니까?
답변
찾고있는 답이 맞는지 확실하지 않지만 일종의 타임 스탬프 (실제로는 다음 지점과의 시간차)로 이벤트를 기록합니다. 다음과 같음 :
class Point {
int x;
int y;
long deltaTime;
}
타이밍에 따라 원하는 정확도를 얻을 수 있습니다. 2 초에서 밀리 세컨드의 정밀도가 충분해야합니다. deltaTime
을이 지점을 그릴 때까지의 시간 또는 다음 지점을 그릴 때까지의 시간으로 해석 할 수 있습니다 (예제에서 후자를 사용하려고합니다).
직접 타임 스탬프 대신 델타 시간을 사용하는 몇 가지 이유는 실제로 긴 일시 중지를 확인할 수있게하고 재생시 델타 시간을 계산해야하기 때문입니다. 또한 long으로 사용하면 실제 긴 대기 시간을위한 충분한 공간을 제공하고 실행하기 전에 대기 할 시간 (밀리 초)에 긴 정수를 허용하는 Handler
클래스를 사용할 수 있습니다.
public class Redrawer implements Handler.callback {
LinkedList<Point> points; //List of point objects describing your drawing
Handler handler = new Handler(this); //Probably should place this in class initialization code
static final int MSG_DRAW_NEXT = 0;
public void begin(){
//Do any prep work here and then we can cheat and mimic a message call
//Without a delay specified it will be called ASAP but on another
//thread
handler.sendEmptyMessage(MSG_DRAW_NEXT);
}
public boolean handleMessage(Message msg){
//If you use the handler for other things you will want to
//branch off depending on msg.what
Point p = points.remove(); //returns the first element, and removes it from the list
drawPoint(p);
if (!points.isEmpty())
handler.sendEmptyMessageDelayed(MSG_DRAW_NEXT, p.deltaTime);
public void drawPoint(Point p){
//Canvas drawing code here
//something like canvas.drawPixel(p.x, p.y, SOMECOLOR);
//too lazy to look up the details right now
//also since this is called on another thread you might want to use
//view.postInvalidate
}
이 코드는 완전하거나 방탄하지 않았습니다. 즉, 사용자가 활동을 전환했거나 전화가 걸려 나중에 다시 그리기를 일시 중지하거나 다시 시작해야합니다. 캔버스 개체를 얻은 위치 나 방법에 대한 세부 정보도 구현하지 않았습니다. 그 부분은 지금 쯤). 또한 이전 지점을 추적하여 화면의 작은 부분을 다시 그리는 것이 모두 다시 그려지는 것보다 훨씬 빠르기 때문에 View.postInvalidate
에 보낼 사각형을 만들 수 있습니다. 마지막으로 정리를 구현하지 않았으므로 필요에 따라 처리기 및 포인트 목록을 삭제해야합니다.
아마도 여기에는 몇 가지 다른 접근법이있을 수 있습니다. 터치 이벤트 사이의 긴 일시 중지가 걱정된다면 deltaTime
의 체크를 10 초를 초과하는 경우 추가하고 10 초로 오버라이드하십시오. 전의. handler.sendEmptyMessage(MSG_DRAW_NEXT, Math.min(p.deltaTime, 100000));
그러나 하드 코딩 된 번호 대신 상수를 사용하는 것이 좋습니다.
희망 하시겠습니까?
Thurxb for ur interest ... 나는 이것을 확실히 시도 할 것이다. – user1435009
- 1. 터치 된 점을 인쇄하여 그리는 Android 앱을 만드는 방법은 무엇입니까?
- 2. 30fps의 Android 캔버스 다시 그리기
- 3. 일부 3D 점을 그리는 방법은 무엇입니까?
- 4. 선 옆에 점을 그리는 방법은 무엇입니까?
- 5. 창을 다시 그리는 방법은 무엇입니까?
- 6. 다시 그리기 android spinner
- 7. Java JPanel (객체 다시 만들기)을 다시 그리는 방법은 무엇입니까?
- 8. 타원형 모양으로 점을 그리는 방법
- 9. Android : 그래픽 요소를 다시 그리는 방법?
- 10. 이미지에 동적 점을 그리기
- 11. 그림을 클릭하면 점을 그리기
- 12. iOS에서 coco-touch보기를 다시 그리는 방법은 무엇입니까?
- 13. Thread 객체에서 jTree를 다시 그리는 방법은 무엇입니까?
- 14. onDraw에서 4 줄을 그리는 방법은 무엇입니까? - android
- 15. coreplot ios에서 다른 점을 사용하여 SMOOTH 커브를 그리는 방법은 무엇입니까?
- 16. JFreeCharts에서 점을 그리는 것 사이의 시간 지연을 코딩하는 방법은 무엇입니까?
- 17. 테두리가있는 문자를 그리는 방법은 무엇입니까?
- 18. 다시 그리기 MediaController 컨트롤
- 19. 이미지가있는 패널에 점을 그리는 방법
- 20. 안드로이드에서 MapView에 100k + 점을 그리기
- 21. 블로그에 다이어그램을 그리는 방법은 무엇입니까?
- 22. SWT에서 보이지 않는 그룹의 콘텐츠를 강제로 다시 그리는 방법은 무엇입니까?
- 23. Android OpenGL 그리기 텍스트
- 24. Android : 일정 시간 지연으로 회선을 그리는 방법은 무엇입니까?
- 25. Android 오디오 녹음 파형을 그리는 방법은 무엇입니까?
- 26. Html5 캔버스 다시 그리기
- 27. android에서지도에 오버레이를 그리는 방법은 무엇입니까?
- 28. MySQL 날짜를 시차로 비교하십시오.
- 29. wxpython 패널에서 mathplotlib 그림을 다시 그리는 방법은 무엇입니까?
- 30. 파이 게임에서 그라데이션 배경에 텍스트를 다시 그리는 방법은 무엇입니까?
문제를 다시 명확하게 지정해주십시오. "이제 모든 점을 추적 할 수 있습니다."라고 말한 후, 나는 당신을 이해할 수 없을 때까지 당신의 진술을 이해했습니다. – Antrromet
'그림 그리기'와 같은 선 그림을 재생하려고합니까? – Russ
@russ 예 .. 공유 할 생각이 있습니까? – user1435009