Actvity에서 사용자 정의보기 클래스로 변수 전달

페샬

canvas.drawLine()방법을 사용하여 캔버스에 오디오 주파수를 그리는 것을 테스트하고 있습니다. 캔버스에 정적 그리기를 할 수 있습니다. 기본적으로 START 및 STOP 두 개의 버튼이있는 테스트 앱과 FFT에서 얻은 오디오 주파수를 그리려는 캔버스가 있습니다. START 버튼을 누르면 AudioRecord클래스를 사용하여 사운드 녹음을 시작 하고 FFT를 통해 실행되는 버퍼에 데이터를 수집하여 주파수를 얻습니다. 이것은 매우 초기 단계입니다. 지금은 이러한 빈도 값을 onDrawCustom View 클래스의 메서드에 전달하는 방법 만 알아 내려고합니다 . 다음은 레이아웃에서 시작하는 관련 코드입니다.

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    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=".MainActivity" >

    <com.example.testapp.WaveForm
        android:id="@+id/waveForm1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="78dp" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/button1"
        android:layout_alignBottom="@+id/button1"
        android:layout_alignRight="@+id/waveForm1"
        android:layout_marginRight="19dp"
        android:text="STOP" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/waveForm1"
        android:layout_alignParentTop="true"
        android:text="START" />

</RelativeLayout>

나는 그것의 매우 전진하다고 생각한다. 다음은 내 사용자 정의보기 클래스입니다.

WaveForm.java

package com.example.testapp;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;

public class WaveForm extends View {

    private Paint mLinePaint;
    float x ;
    float y;

    public WaveForm(Context context, AttributeSet attrs) {
        super(context, attrs);
        mLinePaint = new Paint();
        mLinePaint.setStyle(Paint.Style.STROKE);
        mLinePaint.setARGB(255, 0, 0, 255);
        mLinePaint.setAntiAlias(true);
        mLinePaint.setStrokeWidth(10);
        x = 0.0f;
        y = 0.0f;

    }

    @Override
    protected void onDraw(Canvas canvas) {
        //Instead of 50 here i would like to pass the value obtained from the Activity class
        canvas.drawLine(x, 0, y, 50, mLinePaint);   
        y = y + 1.0f;
        x = x + 1.0f;
        super.onDraw(canvas);
    }



}

onDraw 메서드의 주석에서 언급했듯이 50 대신 Activity에서 얻은 빈도 값을 전달하고 싶습니다. 마지막으로 내 Activity가 있습니다.

MainActivity.java

package com.example.testapp;


import android.app.Activity;
import android.graphics.Canvas;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder.AudioSource;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;



public class MainActivity extends Activity {
    boolean recording = false;
    AudioRecord audioRecord;
    double[] x;
    double[] y;
    double currentPoint = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final View myInstance = (View) findViewById(R.id.waveForm1);

        Button start = (Button) findViewById(R.id.button1);
        start.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {
            int sampleRateInHz=44100;
            int channelConfig = AudioFormat.CHANNEL_IN_MONO;
            int bufferSizeInBytes = AudioRecord.getMinBufferSize(sampleRateInHz, channelConfig, AudioFormat.ENCODING_PCM_16BIT);
            audioRecord = new AudioRecord(AudioSource.MIC, sampleRateInHz, channelConfig, AudioFormat.ENCODING_PCM_16BIT,  AudioRecord.getMinBufferSize(sampleRateInHz, channelConfig, AudioFormat.ENCODING_PCM_16BIT));
            byte[] audioData = new byte[bufferSizeInBytes/4];

            FFT myFFT = new FFT(audioData.length);
            Canvas canvas = new Canvas();
            recording = true;
            audioRecord.startRecording();
            while(recording) {
            audioRecord.read(audioData,0, bufferSizeInBytes/4);
            //convert to double here
            for(int i=0; i<audioData.length; i++) {
                x[i] = (double)audioData[i];
                y[i] = 0;
            }
            double[] samples = myFFT.fft(x, y);
            for(int i=0; i<samples.length; i++) {
                currentPoint = samples[i];
                myInstance.draw(canvas);
                myInstance.invalidate();
            }
            }

        }
        });
        Button stop = (Button) findViewById(R.id.button2);
        stop.setOnClickListener(new OnClickListener(){

        @Override
        public void onClick(View v) {
        recording = false;
        audioRecord.stop();

        }
        });     
    }     
}

currentPoint변수는 내가에 전달하려고 것입니다 onDraw방법. 확인해 주셔서 미리 감사드립니다.

ρяσѕρєя K

다음 과 같이 호출하기 전에 값을 가져 오기 위해 currentPoint내부 변수에 대한 Getter / Setter를 만듭니다 .WaveFormMainActivitydraw

public class WaveForm extends View {

    private double currentPoint = 50;
    public void setCurrentPoint(double currentPoint){
         this.currentPoint=currentPoint;
    }
    public double getCurrentPoint(){

       return this.currentPoint;
    }
    @Override
    protected void onDraw(Canvas canvas) {

        canvas.drawLine(x, 0, y, getCurrentPoint(), mLinePaint);   
        ...
    }

}

호출 하기 전에 메서드를 호출 하여 MainActivity설정 currentPoint에서 :setCurrentPointonDraw

    for(int i=0; i<samples.length; i++) {
        currentPoint = samples[i];
        myInstance.setCurrentPoint(currentPoint);
        myInstance.draw(canvas);
        myInstance.invalidate();
    }

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

사용자 정의보기에 외부 매개 변수 전달

분류에서Dev

데이터 바인딩 변수를 xml 속성으로 사용자 정의보기에 전달하는 방법

분류에서Dev

사용자 정의 클래스를 기본 메소드에서 parametrizedthreadstart 클래스로 전달

분류에서Dev

사용자 정의 클래스의 메서드에 asp.net의 매개 변수로 radiobuttonList를 전달할 수 있습니까?

분류에서Dev

VBA : 사용자 정의 유형으로 sub ()에 변수 전달

분류에서Dev

GRUB에서 OS로 사용자 지정 매개 변수 전달

분류에서Dev

인수로 세 개의 인수가있는 클래스 변수를 매개 변수로 생성자에 전달

분류에서Dev

Ksoap : 웹 메서드에 매개 변수로 사용자 정의 클래스를 전달할 때 예외를 직렬화 할 수 없습니다.

분류에서Dev

클래스 생성자 C #에서 가변 개수의 매개 변수 전달

분류에서Dev

기본 클래스를 사용하여 상속 구성 요소를 매개 변수로 메서드에 전달

분류에서Dev

AS3-사용자 정의 클래스에서 Main.as로 어레이 전달

분류에서Dev

Winform C #의 클래스 함수에 콤보 상자 선택한 항목을 매개 변수 값으로 전달

분류에서Dev

클래스를 열거 형의 생성자 매개 변수로 전달한 다음 메소드에서 반환 유형으로 사용할 수 있습니까?

분류에서Dev

Java의 두 클래스 사이에 변수 값 전달

분류에서Dev

리디렉션에서 클래스 기반보기로 매개 변수 전달

분류에서Dev

MainActivity에서 사용자 지정 목록보기 어댑터 클래스로 값 전달

분류에서Dev

Javascript에서 "클래스"생성자 인수로 전달되는 변수를 초기화해야합니까?

분류에서Dev

정적 변수를 상수로 캐스팅하고이를 사용하여 final을 예상하는 클래스 생성자에 전달하는 방법

분류에서Dev

Swift의 자식보기에서 부모보기로 변수 전달

분류에서Dev

데이터는 AsynTask 클래스의 사용자 지정 목록보기에 도달 할 수 없습니다.

분류에서Dev

변수를 사용하여 클래스 만들기와 매개 변수로 메서드에 전달하는 변수

분류에서Dev

메서드에 매개 변수로 전달 된 클래스 유형을 사용하여 지역 변수를 정의하는 방법

분류에서Dev

MVVM에서 CommandParameter를 사용하여 클래스 변수 전달

분류에서Dev

사용자 지정 클래스 개체를 사용한 IOS 위임; 모달보기에서 상위보기로 개체 전달

분류에서Dev

다른 클래스의 생성자에서 클래스 함수로 배열 전달

분류에서Dev

배열을 인수로 전달; 스캐너 클래스를 사용하여 사용자 입력으로 Java에서 배열 설정

분류에서Dev

C #에서 클래스의 인스턴스를 매개 변수로 전달

분류에서Dev

멤버 함수에서 클래스의 전용 변수 사용

분류에서Dev

멤버 함수에서 클래스의 전용 변수 사용

Related 관련 기사

  1. 1

    사용자 정의보기에 외부 매개 변수 전달

  2. 2

    데이터 바인딩 변수를 xml 속성으로 사용자 정의보기에 전달하는 방법

  3. 3

    사용자 정의 클래스를 기본 메소드에서 parametrizedthreadstart 클래스로 전달

  4. 4

    사용자 정의 클래스의 메서드에 asp.net의 매개 변수로 radiobuttonList를 전달할 수 있습니까?

  5. 5

    VBA : 사용자 정의 유형으로 sub ()에 변수 전달

  6. 6

    GRUB에서 OS로 사용자 지정 매개 변수 전달

  7. 7

    인수로 세 개의 인수가있는 클래스 변수를 매개 변수로 생성자에 전달

  8. 8

    Ksoap : 웹 메서드에 매개 변수로 사용자 정의 클래스를 전달할 때 예외를 직렬화 할 수 없습니다.

  9. 9

    클래스 생성자 C #에서 가변 개수의 매개 변수 전달

  10. 10

    기본 클래스를 사용하여 상속 구성 요소를 매개 변수로 메서드에 전달

  11. 11

    AS3-사용자 정의 클래스에서 Main.as로 어레이 전달

  12. 12

    Winform C #의 클래스 함수에 콤보 상자 선택한 항목을 매개 변수 값으로 전달

  13. 13

    클래스를 열거 형의 생성자 매개 변수로 전달한 다음 메소드에서 반환 유형으로 사용할 수 있습니까?

  14. 14

    Java의 두 클래스 사이에 변수 값 전달

  15. 15

    리디렉션에서 클래스 기반보기로 매개 변수 전달

  16. 16

    MainActivity에서 사용자 지정 목록보기 어댑터 클래스로 값 전달

  17. 17

    Javascript에서 "클래스"생성자 인수로 전달되는 변수를 초기화해야합니까?

  18. 18

    정적 변수를 상수로 캐스팅하고이를 사용하여 final을 예상하는 클래스 생성자에 전달하는 방법

  19. 19

    Swift의 자식보기에서 부모보기로 변수 전달

  20. 20

    데이터는 AsynTask 클래스의 사용자 지정 목록보기에 도달 할 수 없습니다.

  21. 21

    변수를 사용하여 클래스 만들기와 매개 변수로 메서드에 전달하는 변수

  22. 22

    메서드에 매개 변수로 전달 된 클래스 유형을 사용하여 지역 변수를 정의하는 방법

  23. 23

    MVVM에서 CommandParameter를 사용하여 클래스 변수 전달

  24. 24

    사용자 지정 클래스 개체를 사용한 IOS 위임; 모달보기에서 상위보기로 개체 전달

  25. 25

    다른 클래스의 생성자에서 클래스 함수로 배열 전달

  26. 26

    배열을 인수로 전달; 스캐너 클래스를 사용하여 사용자 입력으로 Java에서 배열 설정

  27. 27

    C #에서 클래스의 인스턴스를 매개 변수로 전달

  28. 28

    멤버 함수에서 클래스의 전용 변수 사용

  29. 29

    멤버 함수에서 클래스의 전용 변수 사용

뜨겁다태그

보관