kzen.dev
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
Niel Prince
Niel Prince
Question

Menggunakan SeekBar untuk Mengontrol Volume di android?

Bagaimana cara mengubah volume aplikasi saya secara akurat menggunakan seekbar tanpa mengontrol volume dengan tombol volume pada perangkat android saya? Saya memiliki fungsi terpisah pada tombol Volume di android saya, karena itu saya ingin menggunakan seekbar untuk mengontrol volume. Adakah yang bisa membantu saya?

36 2012-04-13T01:58:31+00:00 3
 trgraglia
trgraglia
Pertanyaan edit 23 Juni 2012 в 9:47
Pemrograman
volume
android
android-audiomanager
seekbar
Solution / Answer
 Chirag
Chirag
13 April 2012 в 2:34
2012-04-13T02:34:38+00:00
Lebih
Sumber
Sunting
#15926844

Silakan lihat kode di bawah ini. Ini memecahkan masalah Anda.

import android.app.Activity;
import android.content.Context;
import android.media.AudioManager;
import android.os.Bundle;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;

public class TestExample extends Activity 
{
    /** Called when the activity is first created. */

    private SeekBar volumeSeekbar = null;
    private AudioManager audioManager = null; 

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setVolumeControlStream(AudioManager.STREAM_MUSIC);
        setContentView(R.layout.main);
        initControls();
    }

    private void initControls()
    {
        try
        {
            volumeSeekbar = (SeekBar)findViewById(R.id.seekBar1);
            audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
            volumeSeekbar.setMax(audioManager
                    .getStreamMaxVolume(AudioManager.STREAM_MUSIC));
            volumeSeekbar.setProgress(audioManager
                    .getStreamVolume(AudioManager.STREAM_MUSIC));   

            volumeSeekbar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() 
            {
                @Override
                public void onStopTrackingTouch(SeekBar arg0) 
                {
                }

                @Override
                public void onStartTrackingTouch(SeekBar arg0) 
                {
                }

                @Override
                public void onProgressChanged(SeekBar arg0, int progress, boolean arg2) 
                {
                    audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,
                            progress, 0);
                }
            });
        }
        catch (Exception e) 
        {
            e.printStackTrace();
        }
    }
93
0
 adneal
adneal
13 April 2012 в 2:18
2012-04-13T02:18:58+00:00
Lebih
Sumber
Sunting
#15926843

Ini adalah View khusus yang saya gunakan untuk menyesuaikan tingkat volume. Cara kerjanya adalah dengan menggeser jari Anda ke atas, tetapi Anda dapat dengan mudah mengubahnya.

Tampilan Geser

public class SliderView extends View implements OnGestureListener, OnTouchListener {

private int mHeight = 0;

private int mMaxValue = 16;
private float mDelta = 0;
private int mColor = Color.WHITE;
private GestureDetector mGestureDetector;

private OnValueChangeListener mListener;

public SliderView(Context context) {
    super(context);
    init(context);
}

public SliderView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init(context);
}

public SliderView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    init(context);
}

@Override
public boolean onDown(MotionEvent e) {
    mDelta = 0;
    return false;
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
    return false;
}

@Override
public void onLongPress(MotionEvent e) {
    mDelta = 0;
}

@Override
public boolean onScroll(MotionEvent event1, MotionEvent event2, float distanceX, float distanceY) {

    if (mDelta >= 1 || mDelta <= -1) {
        if (mListener != null) {
            mListener.onValueChanged((int) mDelta);
        }
        mDelta = 0;
    } else {
        mDelta += mMaxValue * distanceY / mHeight * 2;
    }
    return false;
}

@Override
public void onShowPress(MotionEvent e) {

}

@Override
public boolean onSingleTapUp(MotionEvent e) {
    return false;
}

@Override
public void onSizeChanged(int w, int h, int oldw, int oldh) {
    mHeight = getHeight();
}

@Override
public boolean onTouch(View v, MotionEvent event) {

    int action = event.getAction();
    if (action == MotionEvent.ACTION_DOWN) {
        v.setBackgroundColor(Color.argb(0x33, Color.red(mColor), Color.green(mColor),
                Color.blue(mColor)));
    } else if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
        v.setBackgroundColor(Color.TRANSPARENT);
    }
    mGestureDetector.onTouchEvent(event);
    return true;
}

public void setColor(int color) {
    mColor = color;
}

public void setMax(int max) {
    mMaxValue = max;
}

public void setOnValueChangeListener(OnValueChangeListener listener) {
    mListener = listener;
}

private void init(Context context) {
    setOnTouchListener(this);
    mGestureDetector = new GestureDetector(context, this);
    mHeight = getHeight();
}

public interface OnValueChangeListener {

    void onValueChanged(int value);
    }

}

Menggunakannya - pastikan Anda mengimplementasikan OnValueChangeListener.

SliderView mSlider;
mSlider= (SliderView) findViewById(id);
mSlider.setOnValueChangeListener(this);
mSlider.setMax(mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC));

Ini tidak persis seperti yang Anda minta, tetapi ini pasti akan membantu Anda, menurut saya.

3
0
Xar  E Ahmer
Xar E Ahmer
9 Desember 2014 в 1:51
2014-12-09T13:51:34+00:00
Lebih
Sumber
Sunting
#15926845

@CommonsWare melakukannya seperti ini di https://github.com/commonsguy/cw-omnibus/tree/master/SystemServices/Volume dan juga mengatur lima jenis volume menggunakan SeekBar

Menangani lima jenis Volume yang berbeda

/***
  Copyright (c) 2008-2012 CommonsWare, LLC
  Licensed under the Apache License, Version 2.0 (the "License"); you may not
  use this file except in compliance with the License. You may obtain a copy
  of the License at http://www.apache.org/licenses/LICENSE-2.0. Unless required
  by applicable law or agreed to in writing, software distributed under the
  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
  OF ANY KIND, either express or implied. See the License for the specific
  language governing permissions and limitations under the License.

  From _The Busy Coder's Guide to Android Development_
    http://commonsware.com/Android
*/

package com.commonsware.android.syssvc.volume;

import android.app.Activity;
import android.content.Context;
import android.media.AudioManager;
import android.os.Bundle;
import android.widget.SeekBar;

public class Volumizer extends Activity {
  SeekBar alarm=null;
  SeekBar music=null;
  SeekBar ring=null;
  SeekBar system=null;
  SeekBar voice=null;
  AudioManager mgr=null;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mgr=(AudioManager)getSystemService(Context.AUDIO_SERVICE);

    alarm=(SeekBar)findViewById(R.id.alarm);
    music=(SeekBar)findViewById(R.id.music);
    ring=(SeekBar)findViewById(R.id.ring);
    system=(SeekBar)findViewById(R.id.system);
    voice=(SeekBar)findViewById(R.id.voice);

    initBar(alarm, AudioManager.STREAM_ALARM);
    initBar(music, AudioManager.STREAM_MUSIC);//for Volume this is neccessary
    initBar(ring, AudioManager.STREAM_RING);
    initBar(system, AudioManager.STREAM_SYSTEM);
    initBar(voice, AudioManager.STREAM_VOICE_CALL);
  }

  private void initBar(SeekBar bar, final int stream) {
    bar.setMax(mgr.getStreamMaxVolume(stream));
    bar.setProgress(mgr.getStreamVolume(stream));

    bar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
      public void onProgressChanged(SeekBar bar, int progress,
                                    boolean fromUser) {
        mgr.setStreamVolume(stream, progress,
                            AudioManager.FLAG_PLAY_SOUND);
      }

      public void onStartTrackingTouch(SeekBar bar) {
        // no-op
      }

      public void onStopTrackingTouch(SeekBar bar) {
        // no-op
      }
    });
  }
}

Dan hanya untuk mengendalikan Volume saja gunakan music = (SeekBar) findViewById(R.id.music); dan initBar(music, AudioManager.STREAM_MUSIC);

Xar  E Ahmer
Xar E Ahmer
Jawaban edit 8 Februari 2015 в 6:28
3
0
Related communities 1
Android Studio Indonesia
Android Studio Indonesia
2 554 pengguna
Buka telegram
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
Daniel Gogov
Terdaftar 6 hari yang lalu
2
工藤 芳則
Terdaftar 1 minggu yang lalu
3
Ирина Беляева
Terdaftar 2 minggu yang lalu
4
Darya Arsenyeva
Terdaftar 2 minggu yang lalu
5
anyta nuam-nuam (LapuSiK)
Terdaftar 2 minggu yang lalu
ID
JA
KO
RU
© kzen.dev 2023
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi