2015-02-25 19 views

Trả lời

14

tôi đã tạo ra một github project.You có thể có một cái nhìn vào nó https://github.com/sarathnk/Audio

audioSendButton.setOnTouchListener(new View.OnTouchListener() { 
      @Override 
      public boolean onTouch(View view, MotionEvent motionEvent) { 
       if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { 
        FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) slideText 
          .getLayoutParams(); 
        params.leftMargin = dp(30); 
        slideText.setLayoutParams(params); 
        ViewProxy.setAlpha(slideText, 1); 
        startedDraggingX = -1; 
        // startRecording(); 
        startrecord(); 
        audioSendButton.getParent() 
          .requestDisallowInterceptTouchEvent(true); 
        recordPanel.setVisibility(View.VISIBLE); 
       } else if (motionEvent.getAction() == MotionEvent.ACTION_UP 
         || motionEvent.getAction() == MotionEvent.ACTION_CANCEL) { 
        startedDraggingX = -1; 
        stoprecord(); 
        // stopRecording(true); 
       } else if (motionEvent.getAction() == MotionEvent.ACTION_MOVE) { 
        float x = motionEvent.getX(); 
        if (x < -distCanMove) { 
         stoprecord(); 
         // stopRecording(false); 
        } 
        x = x + ViewProxy.getX(audioSendButton); 
        FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) slideText 
          .getLayoutParams(); 
        if (startedDraggingX != -1) { 
         float dist = (x - startedDraggingX); 
         params.leftMargin = dp(30) + (int) dist; 
         slideText.setLayoutParams(params); 
         float alpha = 1.0f + dist/distCanMove; 
         if (alpha > 1) { 
          alpha = 1; 
         } else if (alpha < 0) { 
          alpha = 0; 
         } 
         ViewProxy.setAlpha(slideText, alpha); 
        } 
        if (x <= ViewProxy.getX(slideText) + slideText.getWidth() 
          + dp(30)) { 
         if (startedDraggingX == -1) { 
          startedDraggingX = x; 
          distCanMove = (recordPanel.getMeasuredWidth() 
            - slideText.getMeasuredWidth() - dp(48))/2.0f; 
          if (distCanMove <= 0) { 
           distCanMove = dp(80); 
          } else if (distCanMove > dp(80)) { 
           distCanMove = dp(80); 
          } 
         } 
        } 
        if (params.leftMargin > dp(30)) { 
         params.leftMargin = dp(30); 
         slideText.setLayoutParams(params); 
         ViewProxy.setAlpha(slideText, 1); 
         startedDraggingX = -1; 
        } 
       } 
       view.onTouchEvent(motionEvent); 
       return true; 
      } 
     }); 
+0

Grea t Làm việc ở đây tôi muốn lưu trữ âm thanh đã ghi –

3

tôi đã triển khai nút gửi như trong ứng dụng whatsapp mà có thể là trong gửi nhà nước hoặc nhà nước kỷ lục. Bạn có thể xem nó ở đây trên blog post của tôi.

Cách sử dụng rất đơn giản.

<com.gunhansancar.android.animbutton.AnimButton 
     android:id="@+id/animButton" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:layout_width="50dp" 
     android:layout_height="50dp" 
     app:first="@drawable/ic_mic" 
     app:second="@drawable/ic_send" /> 

Bạn chỉ cần đặt độ phân giải đầu tiên và thứ hai. Và bạn cũng phải thiết lập trạng thái bằng cách gọi phương thức goToState().

2

bạn có thể sử dụng thư viện mà tôi đã thực hiện RecordView

thật dễ dàng để thiết lập và nó mô phỏng hành vi tương tự như WhatsApp.

Chỉ cần thêm Views RecordViewRecordButton

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/parent_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="com.devlomi.recordview.MainActivity"> 

<com.devlomi.record_view.RecordView 
    android:id="@+id/record_view" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_toLeftOf="@id/record_button" 
    app:slide_to_cancel_arrow="@drawable/ic_keyboard_arrow_left" 
    app:slide_to_cancel_text="Slide To Cancel" 
    app:slide_to_cancel_margin_right="10dp"/> 

<com.devlomi.record_view.RecordButton 
    android:id="@+id/record_button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentRight="true" 
    android:background="@drawable/bg_mic" 
    android:scaleType="centerInside" 
    app:src="@drawable/ic_mic_white" 
    /> 

sau đó trong hoạt động của bạn

RecordView recordView = (RecordView) findViewById(R.id.record_view); 
    RecordButton recordButton = (RecordButton) 
    findViewById(R.id.record_button); 

    //IMPORTANT 
    recordButton.setRecordView(recordView); 

cuối cùng bạn có thể xử lý Hoa Ghi

  • onStart khi bắt đầu ghi
  • onCancel khi trượt để hủy bỏ
  • onFinish khi kết thúc kỷ lục và nó trả về thời gian ghi trong millis
  • onLessThanSecond khi thời gian kỷ lục < = 1Second

    recordView.setOnRecordListener(this); 
    
    
        @Override 
        public void onStart() { 
         //Start Recording.. 
         Log.d("RecordView", "onStart"); 
        } 
    
        @Override 
        public void onCancel() { 
         //On Swipe To Cancel 
         Log.d("RecordView", "onCancel"); 
    
        } 
    
        @Override 
        public void onFinish(long recordTime) { 
         //Stop Recording.. 
         String time = getHumanTimeText(recordTime); 
         Log.d("RecordView", "onFinish"); 
    
         Log.d("RecordTime", time); 
        } 
    
        @Override 
        public void onLessThanSecond() { 
         //When the record time is less than One Second 
         Log.d("RecordView", "onLessThanSecond"); 
        } 
    
Các vấn đề liên quan