package com.parttime.widget; import android.app.Dialog; import android.content.Context; import android.content.res.Resources; import android.graphics.Point; import android.os.Build; import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.LinearLayout; import android.widget.TextView; import com.parttime.utils.AndroidUtils; import com.parttime.widget.wheel.OnWheelChangedListener; import com.parttime.widget.wheel.WheelView; import com.parttime.widget.wheel.adapters.ArrayWheelAdapter; import com.qingmu.jianzhidaren.R; /** * 滚轮选择对话框 * Created by wyw on 2015/4/21. */ public class WheelDialog extends Dialog implements View.OnClickListener, OnWheelChangedListener { protected LinearLayout llWheelHouse; protected WheelView[] wheels; protected TextView tvOk; protected TextView tvCanel; protected TextView tvTitle; private boolean isCycle = false; protected OnSubmitListener onSubmitListener; protected OnClickListener onWheelCancelListener; public WheelDialog(Context context, String[]...txts) { super(context, R.style.Dialog); Window window = getWindow(); // 设置显示动画 if (Build.VERSION.SDK_INT >= 14) { window.setDimAmount(0.5f); } DisplayMetrics dm = getContext().getResources().getDisplayMetrics(); // WindowManager.LayoutParams wl = window.getAttributes(); // // wl.x = 0; // wl.y = dm.heightPixels; // // 设置显示位置 // onWindowAttributesChanged(wl); // 设置点击外围解散 setCanceledOnTouchOutside(true); LayoutInflater inflater = (LayoutInflater) LayoutInflater.from(getContext()); View view = (LinearLayout) inflater.inflate(R.layout.dialog_wheel_template, null); initViews(view); setContentView(view); attachWheels(txts); } /*public WheelDialog(Context context, int[]...txtResIds) { }*/ protected void attachWheels(String[]...labelss){ int count = labelss.length; int index = 0; if(count > 0) { wheels = new WheelView[count]; for (String[] labels : labelss) { wheels[index++] = addWheel(labels); } } } protected void attachWheels(Object[] tags, String[]...labelss){ int count = labelss.length; int index = 0; llWheelHouse.removeAllViews(); if(count > 0) { wheels = new WheelView[count]; for (String[] labels : labelss) { WheelView wheelView = addWheel(labels); wheelView.setTag(tags[index]); wheels[index++] = wheelView; } } } protected void resetWheels(Object[] tags, String[]...labelss) { int childCount = llWheelHouse.getChildCount(); int j = 0; Resources res = getContext().getResources(); for (int i = 0; i < childCount; i++) { WheelView childAt = (WheelView) llWheelHouse.getChildAt(i); if (childAt.getTag() == tags[j]) { ArrayWheelAdapter<String> adapter = new ArrayWheelAdapter<String>(getContext(), labelss[j]); adapter.setTextSize(res.getDimensionPixelSize(R.dimen.time_picker_time_item_text_size)); childAt.setViewAdapter(adapter); j++; if (j >= tags.length) { break; } } } } protected WheelView addWheel(String[] labels){ WheelView wheelView = new WheelView(getContext()); Resources res = getContext().getResources(); LinearLayout.LayoutParams lllp = new LinearLayout.LayoutParams(0, res.getDimensionPixelSize(R.dimen.time_picker_time_area_height)); lllp.weight = 1; llWheelHouse.addView(wheelView, lllp); ArrayWheelAdapter<String> adapter = new ArrayWheelAdapter<String>(getContext(), labels); adapter.setTextSize(res.getDimensionPixelSize(R.dimen.time_picker_time_item_text_size)); wheelView.setViewAdapter(adapter); wheelView.setCyclic(isCycle); return wheelView; } protected void initViews(View root){ llWheelHouse = (LinearLayout) root.findViewById(R.id.ll_wheel_container); tvCanel = (TextView) root.findViewById(R.id.txt_cancel); tvOk = (TextView) root.findViewById(R.id.txt_ok); tvTitle = (TextView) root.findViewById(R.id.tv_title); tvCanel.setOnClickListener(this); tvOk.setOnClickListener(this); } @Override public void onChanged(WheelView wheel, int oldValue, int newValue) { } @Override public void onClick(View v) { switch (v.getId()){ case R.id.txt_cancel: onCancel(); break; case R.id.txt_ok: onOk(); break; } } protected void onOk(){ int count = wheels.length; int[] pos = new int[count]; for(int i = 0 ; i < count; ++i){ pos[i] = wheels[i].getCurrentItem(); } if(onSubmitListener != null){ onSubmitListener.onSubmit(pos); } dismiss(); } protected void onCancel() { dismiss(); if (onWheelCancelListener != null) { onWheelCancelListener.onClick(this, 0); } } public void setTitle(String title){ if(tvTitle != null){ tvTitle.setText(title); } } public void setTitle(int title){ if(tvTitle != null){ tvTitle.setText(title); } } public void setLeftBtnTxt(String txt){ if(tvCanel != null){ tvCanel.setText(txt); } } public void setLeftBtnTxt(int txtId){ if(tvCanel != null){ tvCanel.setText(txtId); } } public void setRightBtnTxt(String txt){ if(tvOk != null){ tvOk.setText(txt); } } public void setRightBtnTxt(int txtId){ if(tvOk != null){ tvOk.setText(txtId); } } public void setOnSubmitListener(OnSubmitListener onSubmitListener){ this.onSubmitListener = onSubmitListener; } public void setOnWheelCancelListener(OnClickListener onWheelCancelListener) { this.onWheelCancelListener = onWheelCancelListener; } public void setCurrentPosition(int...pos){ for(int i = 0; i < wheels.length && i < pos.length; ++i){ wheels[i].setCurrentItem(pos[i], false); } } public static interface OnSubmitListener { void onSubmit(int... pos); } public void setCycle(boolean isCycle) { this.isCycle = isCycle; } }