//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package com.geek.wjj;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Paint.Align;
import android.graphics.Paint.FontMetricsInt;
import android.graphics.Paint.Style;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
public class DatePickerView extends View {
public static final String TAG = "DatePickerView";
public static final float MARGIN_ALPHA = 2.8F;
public static final float SPEED = 2.0F;
private List<String> mDataList;
private int mCurrentSelected;
private Paint mPaint;
private float mMaxTextSize = 60.0F;
private float mMinTextSize = 30.0F;
private float mMaxTextAlpha = 255.0F;
private float mMinTextAlpha = 120.0F;
private int mColorText = 3355443;
private int mViewHeight;
private int mViewWidth;
private float mLastDownY;
private float mMoveLen = 0.0F;
private boolean isInit = false;
private DatePickerView.onSelectListener mSelectListener;
private Timer timer;
private DatePickerView.MyTimerTask mTask;
Handler updateHandler = new Handler() {
public void handleMessage(Message msg) {
if(Math.abs(DatePickerView.this.mMoveLen) < 2.0F) {
DatePickerView.this.mMoveLen = 0.0F;
if(DatePickerView.this.mTask != null) {
DatePickerView.this.mTask.cancel();
DatePickerView.this.mTask = null;
DatePickerView.this.performSelect();
}
} else {
DatePickerView.this.mMoveLen = DatePickerView.this.mMoveLen - DatePickerView.this.mMoveLen / Math.abs(DatePickerView.this.mMoveLen) * 2.0F;
}
DatePickerView.this.invalidate();
}
};
public DatePickerView(Context context) {
super(context);
this.init();
}
public DatePickerView(Context context, AttributeSet attrs) {
super(context, attrs);
this.init();
}
public void setOnSelectListener(DatePickerView.onSelectListener listener) {
this.mSelectListener = listener;
}
private void performSelect() {
if(this.mSelectListener != null) {
this.mSelectListener.onSelect((String)this.mDataList.get(this.mCurrentSelected));
}
}
public void setData(List<String> datas) {
this.mDataList = datas;
this.mCurrentSelected = datas != null?datas.size() / 2:0;
this.invalidate();
}
public void setSelected(int selected) {
this.mCurrentSelected = selected;
int distance = this.mDataList.size() / 2 - this.mCurrentSelected;
int i;
if(distance < 0) {
for(i = 0; i < -distance; ++i) {
this.moveHeadToTail();
--this.mCurrentSelected;
}
} else if(distance > 0) {
for(i = 0; i < distance; ++i) {
this.moveTailToHead();
++this.mCurrentSelected;
}
}
this.invalidate();
}
public void setSelected(String mSelectItem) {
for(int i = 0; i < this.mDataList.size(); ++i) {
if(((String)this.mDataList.get(i)).equals(mSelectItem)) {
this.setSelected(i);
break;
}
}
}
private void moveHeadToTail() {
String head = (String)this.mDataList.get(0);
this.mDataList.remove(0);
this.mDataList.add(head);
}
private void moveTailToHead() {
String tail = (String)this.mDataList.get(this.mDataList.size() - 1);
this.mDataList.remove(this.mDataList.size() - 1);
this.mDataList.add(0, tail);
}
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
this.mViewHeight = this.getMeasuredHeight();
this.mViewWidth = this.getMeasuredWidth();
this.mMaxTextSize = (float)this.mViewHeight / 5.0F / 3.0F * 2.0F;
this.mMinTextSize = this.mMaxTextSize / 2.0F;
this.isInit = true;
this.invalidate();
}
private void init() {
this.timer = new Timer();
this.mDataList = new ArrayList();
this.mPaint = new Paint(1);
this.mPaint.setStyle(Style.FILL);
this.mPaint.setTextAlign(Align.CENTER);
this.mPaint.setColor(this.mColorText);
}
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if(this.isInit) {
this.drawData(canvas);
}
}
private void drawData(Canvas canvas) {
float scale = this.parabola((float)this.mViewHeight / 5.0F, this.mMoveLen);
float size = (this.mMaxTextSize - this.mMinTextSize) * scale + this.mMinTextSize / 2.0F;
this.mPaint.setTextSize(size);
this.mPaint.setAlpha((int)((this.mMaxTextAlpha - this.mMinTextAlpha) * scale + this.mMinTextAlpha));
float x = (float)((double)this.mViewWidth / 2.0D);
float y = (float)((double)this.mViewHeight / 2.0D + (double)this.mMoveLen);
FontMetricsInt fmi = this.mPaint.getFontMetricsInt();
float baseline = (float)((double)y - ((double)fmi.bottom / 2.0D + (double)fmi.top / 2.0D));
canvas.drawText((String)this.mDataList.get(this.mCurrentSelected), x, baseline, this.mPaint);
int i;
for(i = 1; this.mCurrentSelected - i >= 0; ++i) {
this.drawOtherText(canvas, i, -1);
}
for(i = 1; this.mCurrentSelected + i < this.mDataList.size(); ++i) {
this.drawOtherText(canvas, i, 1);
}
}
private void drawOtherText(Canvas canvas, int position, int type) {
float d = 2.8F * this.mMinTextSize * (float)position + (float)type * this.mMoveLen;
float scale = this.parabola((float)this.mViewHeight / 5.0F, d);
float size = (this.mMaxTextSize - this.mMinTextSize) * scale + this.mMinTextSize;
this.mPaint.setTextSize(size);
this.mPaint.setAlpha((int)((this.mMaxTextAlpha - this.mMinTextAlpha) * scale + this.mMinTextAlpha));
float y = (float)((double)this.mViewHeight / 2.0D + (double)((float)type * d));
FontMetricsInt fmi = this.mPaint.getFontMetricsInt();
float baseline = (float)((double)y - ((double)fmi.bottom / 2.0D + (double)fmi.top / 2.0D));
canvas.drawText((String)this.mDataList.get(this.mCurrentSelected + type * position), (float)((double)this.mViewWidth / 2.0D), baseline, this.mPaint);
}
private float parabola(float zero, float x) {
float f = (float)(1.0D - Math.pow((double)(x / zero), 2.0D));
return f < 0.0F?0.0F:f;
}
public boolean onTouchEvent(MotionEvent event) {
switch(event.getActionMasked()) {
case 0:
this.doDown(event);
break;
case 1:
this.doUp(event);
break;
case 2:
this.doMove(event);
}
return true;
}
private void doDown(MotionEvent event) {
if(this.mTask != null) {
this.mTask.cancel();
this.mTask = null;
}
this.mLastDownY = event.getY();
}
private void doMove(MotionEvent event) {
this.mMoveLen += event.getY() - this.mLastDownY;
if(this.mMoveLen > 2.8F * this.mMinTextSize / 2.0F) {
this.moveTailToHead();
this.mMoveLen -= 2.8F * this.mMinTextSize;
} else if(this.mMoveLen < -2.8F * this.mMinTextSize / 2.0F) {
this.moveHeadToTail();
this.mMoveLen += 2.8F * this.mMinTextSize;
}
this.mLastDownY = event.getY();
this.invalidate();
}
private void doUp(MotionEvent event) {
if((double)Math.abs(this.mMoveLen) < 1.0E-4D) {
this.mMoveLen = 0.0F;
} else {
if(this.mTask != null) {
this.mTask.cancel();
this.mTask = null;
}
this.mTask = new DatePickerView.MyTimerTask(this.updateHandler);
this.timer.schedule(this.mTask, 0L, 10L);
}
}
class MyTimerTask extends TimerTask {
Handler handler;
public MyTimerTask(Handler handler) {
this.handler = handler;
}
public void run() {
this.handler.sendMessage(this.handler.obtainMessage());
}
}
public interface onSelectListener {
void onSelect(String var1);
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:gravity="center_vertical">
<TextView
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:gravity="center"
android:padding="10dp"
android:text="@string/cancel"
android:textColor="@color/light_dark"
android:textSize="16sp" />
<TextView
android:id="@+id/ok"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:gravity="center"
android:padding="10dp"
android:text="@string/ok"
android:textColor="@color/light_dark"
android:textSize="16sp" />
</RelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:background="@color/gray" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:orientation="horizontal">
<com.geek.wjj.DatePickerView
android:id="@+id/city_pickerview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp" />
</LinearLayout>
</LinearLayout>
![]()
private ArrayList<String> areatotalList = new ArrayList<String>();
private ArrayList<CityPickerViewModel> areaIdList = new ArrayList<CityPickerViewModel>();
if (context.isSucceeded() && data != null) {
if (data.data != null) {
ArrayList<CityDataSM> dataSMs = data.data;
CityPickerViewModel model = new CityPickerViewModel();
model.cityId = 0;
model.cityName = "不限";
areaIdList.add(model);
areatotalList.add("不限");
for (int i = 0; i < dataSMs.size(); i++) {
CityDataSM sm = dataSMs.get(i);
areatotalList.add(sm.cityname);
CityPickerViewModel model1 = new CityPickerViewModel();
model1.cityName = sm.cityname;
model1.cityId = sm.cityid;
areaIdList.add(model1);
}
Log.i("tag", "======id==" + areaIdList.toString());
Log.i("tag", "=name==" + areatotalList.toString());
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.wherearea_tv:
showDatePickerView();
break;
}
}
private void showDatePickerView() {
hideKeyBoard();
if (cityPopup == null) {
initDatePopup();
} else {
PopupUtils.showPopupWindow(this, wherearea_tv, cityPopup);
}
}
/**
* 方法说明:
*/
private void initDatePopup() {
cityview = getLayoutInflater().inflate(R.layout.city_pickerview, null);
cityPopup = new PopupWindow(cityview, ViewGroup.LayoutParams.MATCH_PARENT, (int) (deviceHeight * 0.5));
DatePickerView cityPickerView = (DatePickerView) cityview.findViewById(R.id.city_pickerview);
TextView confirmTv = (TextView) cityview.findViewById(R.id.ok);
TextView cancelTv = (TextView) cityview.findViewById(R.id.cancel);
cityPickerView.setData(areatotalList);
cityPickerView.setSelected(areatotalList.get(0));
cityPickerView.setOnSelectListener(new DatePickerView.onSelectListener() {
@Override
public void onSelect(String text) {
cityName = text;
}
});
cancelTv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
cityPopup.dismiss();
}
});
confirmTv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
for (int i = 0; i < areaIdList.size(); i++) {
CityPickerViewModel sm = areaIdList.get(i);
if (sm.cityName.equals(cityName)) {
cityId = sm.cityId;
}
}
Log.i("tag", "==cityId==" + cityName + cityId);
Log.i("tag", "======id==" + areaIdList.toString());
Log.i("tag", "==name==" + areatotalList.toString());
cityPopup.dismiss();
}
});
showDatePickerView();
}