上下滑屏调节声音、亮度

上下滑动屏幕实现屏幕亮度和系统声音的调节,通过手势实现这一功能,需求做成组合控件,其他人只需在xml中引用即可

 

 

package com.inlee.demo.view;

import com.inlee.demo.R;

import android.app.Activity;
import android.content.Context;
import android.media.AudioManager;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.Display;
import android.view.GestureDetector;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
import android.widget.Toast;

public class VolumeBright extends RelativeLayout  {
 
 private Context mContext;
    private WindowManager mWindowManager;
    private Window mWindow;
    private Activity mActivity;
    private WindowManager.LayoutParams lp ;
   
 private TextView  mTxTv ;
 private ImageView mImgBtn;
 private LayoutInflater mLayoutInflater;
 private View mView ;
 private GestureDetector mGestureDetector;
    private AudioManager mAudioManager;
    private VerticalSeekBar mSeekBar;
   
//    private Animation mAlphaAnimation ,mScaleAnimation;
//    private AnimationSet animationSet;
   
    private int mBrightChanged , mVolumeChanged , mDisplayWidth;
    private boolean misVolume = true;
   
    private static final int MAX_VALUE = 255;
    private static final int PRECENT = 100;
    private static final int CHANGE_RATE = 4;
    private static final int BOUNDARY_VALUE = 10;

 private  Handler mHandler = new Handler(){

  @Override
  public void handleMessage(Message msg) {
   // TODO Auto-generated method stub
   super.handleMessage(msg);
   //hideAnimation();
   mView.setVisibility(View.GONE);
  }
    };
   
 public VolumeBright(Context context, AttributeSet attrs, int defStyle) {
  super(context, attrs, defStyle);
  init(context);
 }

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

 public VolumeBright(Context context) {
  super(context);
  init(context);
 }
 @SuppressWarnings("deprecation")
 public void init(Context context){
  
  mContext = context;
  mLayoutInflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  
  mView = mLayoutInflater.inflate(R.layout.volumelight, this);
  mSeekBar = (VerticalSeekBar)findViewById(R.id.volumebright);
  mSeekBar.setMax(100);
  mSeekBar.setClickable(false);
  mSeekBar.setFocusable(false);
  mImgBtn = (ImageView)mView.findViewById(R.id.vl_img);
  mTxTv = (TextView)mView.findViewById(R.id.vl_text);
  
  mGestureDetector = new GestureDetector(new DefaultGestureDetector());  
  mAudioManager = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);  
  //设置动画时间            alphaAnimation.setDuration(3000);  

        mVolumeChanged =  mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC)*17;
        mBrightChanged = 80 ;
        //mSeekBar.setProgress(mVolumeChanged);
 }
 
// private class seekBarChangeListener implements OnSeekBarChangeListener{
//
//  @Override
//  public void onProgressChanged(SeekBar seekBar, int progress,
//    boolean fromUser) {
//   // TODO Auto-generated method stub
//   
//  }
//
//  @Override
//  public void onStartTrackingTouch(SeekBar seekBar) {
//   // TODO Auto-generated method stub
//   
//  }
//
//  @Override
//  public void onStopTrackingTouch(SeekBar seekBar) {
//   // TODO Auto-generated method stub
//   
//  }
//  
// }
// private void hideAnimation(){
//  
//  mAlphaAnimation=new AlphaAnimation(1.0f,0.5f); 
//
//  mAlphaAnimation.setDuration(800);//设置时间持续时间为 1000毫秒  
//        animationSet=new AnimationSet(true);       
//        animationSet.addAnimation(mAlphaAnimation);//透明度  
//       
//       
//        mView.startAnimation(animationSet);//开始播放  
//
// }
 /**
  * isVolume 为真对音量进行调节,否则调节屏幕亮度
  *
  **/
    public class DefaultGestureDetector extends SimpleOnGestureListener{

  @Override
  public boolean onScroll(MotionEvent e1, MotionEvent e2,
    float distanceX, float distanceY) {

         if(e1 == null || e2 == null){
          return false ;
         }
         float last_y = e1.getY(), current_y = e2.getY(); 
        
         if(misVolume){
          if (last_y - current_y > BOUNDARY_VALUE) {
           mVolumeChanged += CHANGE_RATE;
           if(mVolumeChanged >= MAX_VALUE){
            mVolumeChanged = MAX_VALUE;
           }
           mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, mVolumeChanged/17, AudioManager.FLAG_PLAY_SOUND);
        mHandler.post(run);
              return true;
             
          } else if (last_y - current_y < -BOUNDARY_VALUE) {
           mVolumeChanged -= CHANGE_RATE;
           if(mVolumeChanged <= 0){
            mVolumeChanged = 0;
           }
           mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, mVolumeChanged/17, AudioManager.FLAG_PLAY_SOUND);
        mHandler.post(run);
        
              return true;
          }  
         }else{
          if (last_y - current_y > BOUNDARY_VALUE) {   
           mBrightChanged += CHANGE_RATE;
              if(mBrightChanged>=MAX_VALUE){
               mBrightChanged = MAX_VALUE;
              }
              mHandler.post(run);
             
              return true;
          } else if (last_y - current_y < -BOUNDARY_VALUE) {   
           mBrightChanged -= CHANGE_RATE;
              if(mBrightChanged<=0){
               mBrightChanged = 0;
              }
              mHandler.post(run);
             
              return true;
          }
         }
         return false;
  }
    }
   
  public GestureDetector getGestureDetector(){
   return mGestureDetector;
  }
  
 @Override
 public boolean onTouchEvent(MotionEvent event) {
  // TODO Auto-generated method stub
  
  return mGestureDetector.onTouchEvent(event);
 }

 private Runnable run = new Runnable() {
  
  @Override
  public void run() {
            if(misVolume){
             mTxTv.setText(mVolumeChanged*PRECENT/MAX_VALUE + " %");
             mSeekBar.setProgress(mVolumeChanged*PRECENT/MAX_VALUE);
            }else{
             setBrightness(mBrightChanged);
            }
  }
 };
    /**
     * 设置当前窗口亮度
     *
     **/
    private  void setBrightness(int value)
    {       
       try {
            lp.screenBrightness = (float)(value<=0?1:value) /MAX_VALUE;
            mWindow.setAttributes(lp);
            mTxTv.setText(mBrightChanged*PRECENT/MAX_VALUE + " %"); 
            mSeekBar.setProgress(mBrightChanged*PRECENT/MAX_VALUE);
        } catch (Exception e) {
             Toast.makeText(mActivity,"无法改变亮度",Toast.LENGTH_SHORT).show();
        }       
    }

 private void isTheVolume(boolean isVolume){
  
  this.misVolume = isVolume ;
  
  if(misVolume){
   mTxTv.setText(mVolumeChanged*PRECENT/MAX_VALUE + " %");
   mSeekBar.setProgress(mVolumeChanged*PRECENT/MAX_VALUE);
         mImgBtn.setImageResource(R.drawable.player_pop_volume);
   mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, mVolumeChanged/17, AudioManager.FLAG_PLAY_SOUND);
  }else{
   mTxTv.setText(mBrightChanged*PRECENT/MAX_VALUE + " %"); 
   mSeekBar.setProgress(mBrightChanged*PRECENT/MAX_VALUE);
   mImgBtn.setImageResource(R.drawable.player_pop_bright);
   setBrightness(mBrightChanged);
  }
 }
 
    /**
     * 外部接口,首先初始化音量和亮度调节需要的系统控制对象
     * 调节完成后设置提示UI的可见性
     * **/
 @SuppressWarnings("deprecation")
 public void initVolumeAndBright(Activity act){
  
  this.mActivity = act;
  this.mWindowManager = mActivity.getWindowManager();
  this.mWindow = mActivity.getWindow();
        lp = mWindow.getAttributes(); 
        Display display=mWindowManager.getDefaultDisplay();
        mDisplayWidth = display.getWidth()/2;
 }

  public void setViewVisiable(int posx){
   
  if(posx<mDisplayWidth){
   isTheVolume(true);
  }else{
   isTheVolume(false);
  }
  mView.setVisibility(View.VISIBLE);
  }
  
  public void setViewGone(){
   mHandler.sendEmptyMessageDelayed(0, 2000);
  }
}

volumelight.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/sdbt_mm"
    android:orientation="horizontal" >
 <com.inlee.demo.view.VerticalSeekBar
     android:layout_width="wrap_content"
     android:layout_height="200dp"
     android:layout_centerVertical="true"
     android:layout_marginLeft="5dp"
     android:id="@+id/volumebright"
     android:thumb="@null"
     android:padding="10dp"
     android:background="@drawable/seekbar_bkg"
     android:progressDrawable="@drawable/seekbar_styles"
     />
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:background="#242424"
        android:orientation="vertical"
        android:paddingLeft="10dp"
        android:paddingRight="10dp" >

        <ImageView
            android:id="@+id/vl_img"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:src="@drawable/player_pop_volume" />

        <TextView
            android:id="@+id/vl_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="15%"
            android:textSize="16sp"
            android:textStyle="bold" />
    </LinearLayout>

 

</RelativeLayout>

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值