pda/zhuike/.svn/pristine/00/00782ef6eb732c34d7e7a93385d...

265 lines
8.7 KiB
Plaintext
Raw Normal View History

2024-02-06 22:23:29 +08:00
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);
}
}