2013-08-05 1 views
1

나는 여기에 안드로이드 프로젝트에 "조정 손잡이"를 추가하는 예제 프로젝트를 발견안드로이드 조절 노브 위젯

http://go-lambda.blogspot.com/2012/02/rotary-knob-widget-on-android.html

그리고, 전반적으로, 그것은 매우 잘 작동합니다. 내 프로젝트는 몇 가지 방법의 예에서 벗어나 있지만, 가장 중요한 것은이 같은 노브 위젯 및 디스플레이 프로그램 (NO XML)에 완료 버튼, 추가 점이다

activity.getWindowManager().getDefaultDisplay().getMetrics (app.metrics); 
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams 
    (300, RelativeLayout.LayoutParams.WRAP_CONTENT); 

lp.topMargin   = 100; 
lp.bottomMargin   = 598; 
lp.leftMargin   = 50; 
lp.rightMargin   = 348; 

lp.height    = 300; 
lp.width    = 300; 

activity.addView (knob, lp); 

lp = new RelativeLayout.LayoutParams (RelativeLayout.LayoutParams.WRAP_CONTENT, 
    RelativeLayout.LayoutParams.WRAP_CONTENT); 

int top = (int)(0.75 * app.metrics.heightPixels) - 40; 
lp.topMargin   = top - 100; 
lp.leftMargin   = 150; 
lp.rightMargin   = 100; 

act.addView (b1, lp); 
knob.requestFocus(); 

내가 좋아하는 방법과 그래픽이 나타납니다 (대부분의 경우). 그러나 문제는 노브가 회전 할 때 중심을 중심으로 회전하지 않는 것처럼 보이므로 결과적으로 좌우로 (그리고 위아래로) 흔들 리게됩니다. 사용자가 그것을 돌린다. 중요한 내용에는 영향을 미치지 않지만 재미있어 보입니다. 수정하고 싶습니다.

+0

내가 사용하고있는 노브 이미지 (내가 언급 한 웹 사이트에서 다운로드 한 노브 이미지)는 실제로 문제가있는 곳일 것입니다. 노브의 그림이 PNG 파일 자체에 가운데에 표시되는 것은 아닙니다. 수다. 어쨌든, 그냥 인터넷 검색 (전혀 잘 작동하지 않았다 - 나는이 시점에서 내가 무엇을 검색할지 모르겠다.), 누구든지 소프트웨어에서 사용하기에 적합한 멋진 오픈 소스 그래픽 파일을 찾을 수있는 방법을 제안 할 수있다. 프로젝트 ?? – Rich

+0

나는 다이얼 컨트롤의 형태로 오픈 소스 저장소를 가지고있다. 이렇게하면 최적화되고 안정된 테스트를 통해 문제를 해결할 수 있습니다. https://bitbucket.org/warwick/hggldial – user2288580

답변

1

궁극적으로이 문제는 간단합니다 (동시에 매우 귀찮습니다). 예제 프로젝트에 제공된 png 파일은 사각형이었고 그 안에있는 노브의 그림은 정사각형의 중심에 있지 않았습니다. 내 안드로이드 응용 프로그램은 분명히 노브를 회전하지 않습니다, 그것은 사각형 PNG 파일을 회전이야. 실제로 성가신 부분은 (1) 대체 파일을 찾거나 (2) 원래 파일을 수정하는 것이 얼마나 어려웠는지였습니다. 다행히도 항목 2에 적합한 도구를 가진 사람을 찾았습니다. 내 권장 사항 : 프로젝트에서 비슷한 것을해야하는 경우 내가 추천 한 웹 사이트가 매우 유용하지만 실제 그림을 꾸미거나 수정하려고 할 것입니다.

0

게시 된 예제의 회전 문제는 이미지가 매끄럽게 증가/회전하는 대신 컨트롤이 개별 단계로 회전하기 때문에 발생했을 가능성이 큽니다. 작은 각도의 회전 코드를 수정하는 방법은 무엇입니까?

처음부터이 작업을 수행하려면 터치 좌표를 극좌표로 변환하는 방법이 필요합니다 (회전 각도가 필요함).

private float cartesianToPolar(float x, float y) { 
    return (float) -Math.toDegrees(Math.atan2(x - 0.5f, y - 0.5f)); 
} 

가 이미지 뷰를 회전하려면, 또는 당신이 당신의 손잡이를 표시하기 위해 사용하는 요소는이 같은 행렬을 사용할 수 있습니다 :이 이렇게 쉽게 수행 할 수 있습니다

Matrix matrix=new Matrix(); 
ivRotor.setScaleType(ScaleType.MATRIX); 
matrix.postRotate((float) deg, m_nWidth/2, m_nHeight/2);//getWidth()/2, getHeight()/2); 
ivRotor.setImageMatrix(matrix); 

는 ℃,가이다 ivRobor는 손잡이 이미지 뷰입니다.

추가 도움이 필요할 경우를 대비하여 전체 작업 샘플을 함께 작성했습니다. 여기에서 볼 수 있습니다 : http://www.pocketmagic.net/2013/11/custom-rotary-knob-control-for-android/

+0

정말로, 단계가 전혀 문제가되지 않는다고 생각합니다. 내 구체적인 문제는 정말 그 노브의 그림이 png 파일의 중심에 있지 않다는 것이 었습니다. 일단 내가 (적절한 도구를 사용하여) 누군가가 나를 위해 png 파일을 고치면 디스플레이가 정상적으로 보인다. – Rich