2014-04-04 11 views
0

휴대 전화 용 기타 튜너를 만드는 중입니다. 나는 상당히 안드로이드 개발에 익숙하며, 상당히 도움이 된 https://code.google.com/p/android-guitar-tuner/source/browse/#svn%2Ftrunk%2Fsrc%2Fcom%2Fexample%2FGuitarTuner으로 기타 튜너를 만드는 과정을 이해하려고 노력했습니다.내 앱이 실행 중이지만 화면이 검은 색이어서 맞춤보기를 사용하려고하면 충돌이 발생합니다.

프로젝트가 실행 중일 때 화면이 검은 색 화면 대신 표시되는 문제가 발생했습니다. 로그에서 나는 가장 좋은 주파수를 출력하고 있으며 정확하게 출력하고있다. 나는 커스텀 View를 사용하는 것이 도움이된다는 것을 알았지 만, 그것을 사용할 때마다 충돌이 일어난다. 나는 drawable 이미지를 배경으로 사용하고 싶다. 대신 setContentView (R.layout.activity_tuner)를 사용한다. 내 custom view를 사용하는 방법을 찾고 싶다. setContentView와 같은 것을하기 위해 분석한다. (새로운 분석 (this)).

주요 활동, xml 및 사용자 정의보기 클래스 Heres, 내가 주로 내 문제를 해결하기 시작하거나 리소스를 사용하여 사용자 지정보기를 설정할 수있는 방법에 대한 지침을 요청하고 있습니다. 드로잉 가능한 이미지라면 가능합니다.

또한 사용자 정의보기 클래스에는 아무 것도 없지만 비트 맵을 사용하여 몇 가지 시도를했지만 아무 소용이 없습니다. 나는 거기에있는 코드를 지우고 setContentView (새로운 분석 (this))를 setContentView (R.layout.activity_tuner)로 대체하여 logcat에서 기타로 주파수를 테스트 할 수 있었다.

activity_tuner.xml :

<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:custom="http://schemas.android.com/apk/res/com.example.thenxttuner" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="@drawable/graybackgroundtunerpage" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".Tuner" > 
<com.example.thenxttuner.Analyze 
    android:id="@+id/custView" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 

    /> 
<ImageView 
    android:id="@+id/display" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    android:src="@drawable/dashdrawable" /> 

<Button 
    android:id="@+id/start" 
    android:layout_width="150dp" 
    android:layout_height="wrap_content" 
    android:layout_alignRight="@+id/display" 
    android:layout_below="@+id/display" 
    android:layout_marginTop="21dp" 
    android:background="@color/limegreen" 
    android:text="Stop Tuning" /> 

</RelativeLayout> 

Tuner.java :

public class Tuner extends Activity{ 
boolean recording = true; 
Button start; 
Thread myThread; 
TextView text, texttwo, textthree; 
private double pitch; 
Analyze back; 
private static final String TAG = "Tuner"; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_tuner); 
    start = (Button) findViewById(R.id.start); 

    start.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      if(recording==true){ 
       start.setText("Stop Tuning"); 
       recording=false; 
       onStart(); 
      }else{ 
       start.setText("Start Tuning"); 
       recording=true; 
       onStop(); 
      } 
     } 
    }); 
} 

@Override 
public void onStart(){ 
    super.onStart(); 
    //setContentView(R.layout.activity_tuner); 
    //Log.v(TAG, "in onStart()"); 

    myThread = new Thread(new Detector(this, new Handler())); 
    myThread.run(); 
} 

@Override 
public void onStop(){ 
    super.onStop(); 
    //Log.v(TAG, "in onStop()"); 

    myThread.interrupt(); 
} 


public void ShowResult(final HashMap<Double, Double> frequencies, final double best){ 
    Log.v(TAG, "best = "+best); 

    pitches[0][0] = 82.41; 
    pitches[0][1] = 87.31; 
    pitches[0][2] = 92.5; 
    pitches[0][3] = 98; 
    pitches[0][4] = 103.8; 
    pitches[1][0] = 110; 
    pitches[1][1] = 116.54; 
    pitches[1][2] = 123.48; 
    pitches[1][3] = 130.82; 
    pitches[1][4] = 138.59; 
    pitches[2][0] = 147.83; 
    pitches[2][1] = 155.56; 
    pitches[2][2] = 164.81; 
    pitches[2][3] = 174.62; 
    pitches[2][4] = 185; 
    pitches[3][0] = 196; 
    pitches[3][1] = 207; 
    pitches[3][2] = 220; 
    pitches[3][3] = 233.08; 
    pitches[4][0] = 246.96; 
    pitches[4][1] = 261.63; 
    pitches[4][2] = 277.18; 
    pitches[4][3] = 293.66; 
    pitches[4][4] = 311.13; 
    pitches[5][0] = 329.63; 
    pitches[5][1] = 349.23; 
    pitches[5][2] = 369.99; 
    pitches[5][3] = 392; 
    pitches[5][4] = 415.3; 
    pitches[5][5] = 440; 
} 
double[][] pitches = new double[6][6]; 
} 

Analyze.java : 우리가 UI 스레드에서 실행

public class Analyze extends View{ 
private static final String TAG = "Analyze"; 
private final static int UI_UPDATE = 100; 
private Handler AnaHandler; 
private Timer timer; 

public Analyze(Context context) { 
    // TODO Auto-generated constructor stub 
    super(context); 



    /**UI update 
    AnaHandler = new Handler(); 
    timer = new Timer(); 

    timer.schedule(new TimerTask(){ 
     public void run(){ 
      AnaHandler.post(new Runnable(){ 
       public void run(){ 
        invalidate(); 
       } 
      }); 
     } 
    }, 
    UI_UPDATE, 
    UI_UPDATE);**/ 
    // not sure if needed 


} 

@Override 
public void onDraw(Canvas canvas){ 

} 



} 
+0

분석보기의 다른 생성자를 구현하십시오. http://developer.android.com/reference/android/view/View.html –

+0

빠른 답장을 보내 주셔서 감사합니다! 오늘 밤 빌드 된 뷰 클래스를 가져와 참조를 사용하여 작동시킬 수 있는지 알아 보겠습니다. –

답변

0

앱, UR은 run 메소드를 호출 스레드의 ... 시작 메서드를 사용해야합니다, 그렇지 않으면 그냥 정상적인 메서드 호출입니다.

+0

감사합니다. myThread.run()을 myThread.start()로 전환 했으므로 화면이 더 이상 검정색이 아니며 내 배경 및 레이아웃을 표시합니다. –

+0

당신을 도우는 즐거움 :). –