265 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			265 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| package com.novelbook.android.dialog;
 | ||
| 
 | ||
| import android.content.Context;
 | ||
| import android.graphics.drawable.BitmapDrawable;
 | ||
| import android.view.Gravity;
 | ||
| import android.view.LayoutInflater;
 | ||
| import android.view.MotionEvent;
 | ||
| import android.view.View;
 | ||
| import android.view.ViewGroup;
 | ||
| import android.widget.ImageButton;
 | ||
| import android.widget.PopupWindow;
 | ||
| import android.widget.RelativeLayout;
 | ||
| import android.widget.SeekBar;
 | ||
| import android.widget.TextView;
 | ||
| 
 | ||
| import com.novelbook.android.utils.Config;
 | ||
| import com.novelbook.android.R;
 | ||
| import com.novelbook.android.view.BookPageWidget;
 | ||
| 
 | ||
| 
 | ||
| import java.text.DecimalFormat;
 | ||
| 
 | ||
| 
 | ||
| public class ReadSettingDialog implements BaseDialog,View.OnClickListener {
 | ||
| 
 | ||
|     ImageButton btn_return;
 | ||
|     ImageButton btn_ight;
 | ||
|     ImageButton btn_listener_book;
 | ||
|     TextView tv_pre;
 | ||
|     SeekBar sb_progress;
 | ||
|     TextView tv_next;
 | ||
|     TextView tv_directory;
 | ||
|     TextView tv_dayornight;
 | ||
|     TextView tv_setting;
 | ||
|     TextView tv_Progress;
 | ||
|     RelativeLayout rl_Progress;
 | ||
| 
 | ||
|     private PopupWindow mPopupWindow,mPopupWindowTop;
 | ||
|     private BookPageWidget mBookPageWidget;
 | ||
|     private View view,viewTop;
 | ||
|     private SettingListener mSettingListener;
 | ||
|     private Context mContext;
 | ||
|     private Config config;
 | ||
|     private Boolean mDayOrNight;
 | ||
| 
 | ||
|     public ReadSettingDialog(BookPageWidget bookPageWidget) {
 | ||
|         this.mBookPageWidget = bookPageWidget;
 | ||
|         mContext = bookPageWidget.getContext();
 | ||
|         LayoutInflater layoutInflater = (LayoutInflater) bookPageWidget.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 | ||
|         view = layoutInflater.inflate(R.layout.zdialog_read_setting, null);
 | ||
|         viewTop = layoutInflater.inflate(R.layout.zdialog_read_setting_top, null);
 | ||
| 
 | ||
|         btn_return = (ImageButton) viewTop.findViewById(R.id.btn_return);
 | ||
|         btn_ight = (ImageButton) viewTop.findViewById(R.id.btn_light);
 | ||
|         btn_listener_book = (ImageButton) viewTop.findViewById(R.id.btn_listener_book);
 | ||
|         tv_pre = (TextView) view.findViewById(R.id.tv_pre);
 | ||
|         sb_progress = (SeekBar) view.findViewById(R.id.sb_progress);
 | ||
|         tv_next = (TextView) view.findViewById(R.id.tv_next);
 | ||
|         tv_directory = (TextView) view.findViewById(R.id.tv_directory);
 | ||
|         tv_dayornight = (TextView) view.findViewById(R.id.tv_dayornight);
 | ||
|         tv_setting = (TextView) view.findViewById(R.id.tv_setting);
 | ||
|         tv_Progress = (TextView) view.findViewById(R.id.tv_progress);
 | ||
|         rl_Progress = (RelativeLayout) view.findViewById(R.id.rl_progress);
 | ||
| 
 | ||
|         btn_return.setOnClickListener(this);
 | ||
|         btn_ight.setOnClickListener(this);
 | ||
|         btn_listener_book.setOnClickListener(this);
 | ||
|         tv_pre.setOnClickListener(this);
 | ||
|         sb_progress.setOnClickListener(this);
 | ||
|         tv_next.setOnClickListener(this);
 | ||
|         tv_directory.setOnClickListener(this);
 | ||
|         tv_dayornight.setOnClickListener(this);
 | ||
|         tv_setting.setOnClickListener(this);
 | ||
|         tv_Progress.setOnClickListener(this);
 | ||
|         rl_Progress.setOnClickListener(this);
 | ||
| 
 | ||
| 
 | ||
|         mPopupWindow = new PopupWindow(view, ViewGroup.LayoutParams.MATCH_PARENT,
 | ||
|                 ViewGroup.LayoutParams.WRAP_CONTENT);
 | ||
|         mPopupWindowTop = new PopupWindow(viewTop, ViewGroup.LayoutParams.MATCH_PARENT,
 | ||
|                 ViewGroup.LayoutParams.WRAP_CONTENT);
 | ||
| 
 | ||
|         mPopupWindow.setOutsideTouchable(true);
 | ||
|         mPopupWindow.setBackgroundDrawable(new BitmapDrawable());
 | ||
|         mPopupWindow.setOutsideTouchable(true);
 | ||
|         mPopupWindow.setFocusable(true);// menu菜单获得焦点 如果没有获得焦点menu菜单中的控件事件无法响应
 | ||
|         mPopupWindow.update();
 | ||
| 
 | ||
|         mPopupWindowTop.setOutsideTouchable(true);
 | ||
|         mPopupWindowTop.setBackgroundDrawable(new BitmapDrawable());
 | ||
|         mPopupWindowTop.setOutsideTouchable(true);
 | ||
|         mPopupWindowTop.setFocusable(true);// menu菜单获得焦点 如果没有获得焦点menu菜单中的控件事件无法响应
 | ||
|         mPopupWindowTop.update();
 | ||
| 
 | ||
|         view.setOnTouchListener(new View.OnTouchListener()// 需要设置,点击之后取消popupview,即使点击外面,也可以捕获事件
 | ||
|         {
 | ||
|             public boolean onTouch(View v, MotionEvent event)
 | ||
|             {
 | ||
|                 if (isShow())
 | ||
|                 {
 | ||
|                     dismiss();
 | ||
|                 }
 | ||
|                 return false;
 | ||
|             }
 | ||
|         });
 | ||
| 
 | ||
| 
 | ||
|         config = Config.getInstance();
 | ||
| 
 | ||
|         sb_progress.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
 | ||
|             float pro;
 | ||
|             // 触发操作,拖动
 | ||
|             @Override
 | ||
|             public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
 | ||
|                 pro = (float) (progress / 10000.0);
 | ||
|                 showProgress(pro);
 | ||
|             }
 | ||
| 
 | ||
|             // 表示进度条刚开始拖动,开始拖动时候触发的操作
 | ||
|             @Override
 | ||
|             public void onStartTrackingTouch(SeekBar seekBar) {
 | ||
| 
 | ||
|             }
 | ||
| 
 | ||
|             // 停止拖动时候
 | ||
|             @Override
 | ||
|             public void onStopTrackingTouch(SeekBar seekBar) {
 | ||
|                 if (mSettingListener != null){
 | ||
|                     mSettingListener.changeProgress(pro);
 | ||
|                 }
 | ||
|             }
 | ||
|         });
 | ||
| 
 | ||
|         initDayOrNight();
 | ||
|     }
 | ||
| 
 | ||
|     public void initDayOrNight(){
 | ||
|         mDayOrNight = config.getDayOrNight();
 | ||
|         if (mDayOrNight){
 | ||
|             tv_dayornight.setText(mContext.getResources().getString(R.string.read_setting_day));
 | ||
|         }else{
 | ||
|             tv_dayornight.setText(mContext.getResources().getString(R.string.read_setting_night));
 | ||
|         }
 | ||
|     }
 | ||
| 
 | ||
|     //改变显示模式
 | ||
|     public void changeDayOrNight(){
 | ||
|         if (mDayOrNight){
 | ||
|             mDayOrNight = false;
 | ||
|             tv_dayornight.setText(mContext.getResources().getString(R.string.read_setting_night));
 | ||
|         }else{
 | ||
|             mDayOrNight = true;
 | ||
|             tv_dayornight.setText(mContext.getResources().getString(R.string.read_setting_day));
 | ||
|         }
 | ||
|         config.setDayOrNight(mDayOrNight);
 | ||
|         if (mSettingListener != null) {
 | ||
|             mSettingListener.dayorNight(mDayOrNight);
 | ||
|         }
 | ||
|     }
 | ||
| 
 | ||
|     //显示书本进度
 | ||
|     public void showProgress(float progress){
 | ||
|         if (rl_Progress.getVisibility() != View.VISIBLE) {
 | ||
|             rl_Progress.setVisibility(View.VISIBLE);
 | ||
|         }
 | ||
|         setProgress(progress);
 | ||
|     }
 | ||
| 
 | ||
|     //隐藏书本进度
 | ||
|     public void hideProgress(){
 | ||
|         rl_Progress.setVisibility(View.GONE);
 | ||
|     }
 | ||
| 
 | ||
|     @Override
 | ||
|     public void show() {
 | ||
|         hideProgress();
 | ||
|         mPopupWindowTop.showAtLocation(mBookPageWidget, Gravity.TOP, 0, 0);
 | ||
|         mPopupWindow.showAtLocation(mBookPageWidget, Gravity.BOTTOM, 0, 0);
 | ||
|     }
 | ||
| 
 | ||
|     private void setProgress(float progress){
 | ||
|         DecimalFormat decimalFormat=new DecimalFormat("00.00");//构造方法的字符格式这里如果小数不足2位,会以0补足.
 | ||
|         String p=decimalFormat.format(progress * 100.0);//format 返回的是字符串
 | ||
|         tv_Progress.setText(p + "%");
 | ||
|     }
 | ||
| 
 | ||
|     public void setSeekBarProgress(float progress){
 | ||
|         sb_progress.setProgress((int) (progress * 10000));
 | ||
|     }
 | ||
| 
 | ||
|     @Override
 | ||
|     public void dismiss() {
 | ||
|         mPopupWindowTop.dismiss();
 | ||
|         mPopupWindow.dismiss();
 | ||
|     }
 | ||
| 
 | ||
|     @Override
 | ||
|     public Boolean isShow() {
 | ||
|         return mPopupWindow.isShowing() || mPopupWindowTop.isShowing();
 | ||
|     }
 | ||
| 
 | ||
|     @Override
 | ||
|     public void onClick(View view) {
 | ||
|         switch (view.getId()) {
 | ||
|             case R.id.btn_return:
 | ||
|                 if (mSettingListener != null) {
 | ||
|                     mSettingListener.back();
 | ||
|                 }
 | ||
|                 break;
 | ||
|             case R.id.btn_light:
 | ||
|                 break;
 | ||
|             case R.id.btn_listener_book:
 | ||
|                 break;
 | ||
|             case R.id.tv_pre:
 | ||
|                 if (mSettingListener != null) {
 | ||
|                     mSettingListener.pre();
 | ||
|                 }
 | ||
|                 break;
 | ||
|             case R.id.sb_progress:
 | ||
| 
 | ||
|                 break;
 | ||
|             case R.id.tv_next:
 | ||
|                 if (mSettingListener != null) {
 | ||
|                     mSettingListener.next();
 | ||
|                 }
 | ||
|                 break;
 | ||
|             case R.id.tv_directory:
 | ||
|                 if (mSettingListener != null) {
 | ||
|                     mSettingListener.directory();
 | ||
|                 }
 | ||
|                 break;
 | ||
|             case R.id.tv_dayornight:
 | ||
|                 changeDayOrNight();
 | ||
|                 break;
 | ||
|             case R.id.tv_setting:
 | ||
|                 if (mSettingListener != null) {
 | ||
|                     mSettingListener.setting();
 | ||
|                 }
 | ||
|                 break;
 | ||
|         }
 | ||
|     }
 | ||
| 
 | ||
|     public void setSettingListener(SettingListener settingListener) {
 | ||
|         this.mSettingListener = settingListener;
 | ||
|     }
 | ||
| 
 | ||
|     public interface SettingListener {
 | ||
|         void back();
 | ||
| 
 | ||
|         void pre();
 | ||
| 
 | ||
|         void dismiss();
 | ||
| 
 | ||
|         void next();
 | ||
| 
 | ||
|         void directory();
 | ||
| 
 | ||
|         void dayorNight(Boolean isNight);
 | ||
| 
 | ||
|         void setting();
 | ||
| 
 | ||
|         void changeProgress(float progress);
 | ||
|     }
 | ||
| }
 |