Skip to content

Commit 6e313d9

Browse files
committed
修复低分辨率手机中选中项显示位置稍微偏上的问题
1 parent 3c11b65 commit 6e313d9

File tree

5 files changed

+25
-36
lines changed

5 files changed

+25
-36
lines changed

app/src/main/java/com/bigkoo/pickerviewdemo/MainActivity.java

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,15 @@
33
import android.graphics.Color;
44
import android.os.Bundle;
55
import android.support.v7.app.AppCompatActivity;
6-
import android.view.KeyEvent;
76
import android.view.View;
87
import android.widget.Button;
98
import android.widget.ImageView;
109
import android.widget.TextView;
1110

1211
import com.bigkoo.pickerview.OptionsPickerView;
1312
import com.bigkoo.pickerview.TimePickerView;
14-
import com.bigkoo.pickerview.listener.CustomListener;
1513
import com.bigkoo.pickerview.lib.WheelView;
16-
14+
import com.bigkoo.pickerview.listener.CustomListener;
1715
import com.bigkoo.pickerview.model.IPickerViewData;
1816
import com.bigkoo.pickerviewdemo.bean.CardBean;
1917
import com.bigkoo.pickerviewdemo.bean.PickerViewData;
@@ -359,6 +357,7 @@ public void onClick(View v) {
359357
})
360358
.build();
361359
pvCustomOptions.setPicker(cardItem);//添加数据
360+
362361
}
363362

364363
public void getData() {
@@ -367,27 +366,4 @@ public void getData() {
367366
}
368367
}
369368

370-
@Override
371-
public boolean onKeyDown(int keyCode, KeyEvent event) {
372-
if (keyCode == KeyEvent.KEYCODE_BACK) {
373-
if (pvTime.isShowing()) {
374-
pvTime.dismiss();
375-
return true;
376-
}
377-
if (pvOptions.isShowing()) {
378-
pvOptions.dismiss();
379-
return true;
380-
}
381-
if (pvCustomOptions.isShowing()) {
382-
pvCustomOptions.dismiss();
383-
return true;
384-
}
385-
if (pvCustomTime.isShowing()) {
386-
pvCustomTime.dismiss();
387-
return true;
388-
}
389-
}
390-
return super.onKeyDown(keyCode, event);
391-
}
392-
393369
}

app/src/main/res/layout/activity_main.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
android:layout_width="match_parent"
44
android:layout_height="match_parent"
55
android:orientation="vertical" >
6+
67
<Button
78
android:layout_margin="20dp"
89
android:id="@+id/btn_Time"

pickerview/build.gradle

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
apply plugin: 'com.android.library'
22
apply plugin: 'com.github.dcendents.android-maven'
3-
/*apply plugin: 'com.jfrog.bintray'*/
43
apply plugin: 'com.novoda.bintray-release'//添加插件
54

65

pickerview/src/main/java/com/bigkoo/pickerview/lib/WheelView.java

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import android.os.Handler;
1010
import android.text.TextUtils;
1111
import android.util.AttributeSet;
12+
import android.util.DisplayMetrics;
1213
import android.util.Log;
1314
import android.view.GestureDetector;
1415
import android.view.Gravity;
@@ -116,7 +117,7 @@ public enum DividerType {
116117
private int drawCenterContentStart = 0;//中间选中文字开始绘制位置
117118
private int drawOutContentStart = 0;//非中间文字开始绘制位置
118119
private static final float SCALECONTENT = 0.8F;//非中间文字则用此控制高度,压扁形成3d错觉
119-
private static final float CENTERCONTENTOFFSET = 7;//偏移量
120+
private float CENTERCONTENTOFFSET ;//偏移量
120121

121122
public WheelView(Context context) {
122123
this(context, null);
@@ -129,6 +130,11 @@ public WheelView(Context context, AttributeSet attrs) {
129130
dividerColor = getResources().getColor(R.color.pickerview_wheelview_textcolor_out);*/
130131

131132
textSize = getResources().getDimensionPixelSize(R.dimen.pickerview_textsize);//默认大小
133+
134+
DisplayMetrics dm = getResources().getDisplayMetrics();
135+
float density = dm.density; // 屏幕密度(0.75/1.0/1.5/2.0/3.0)
136+
CENTERCONTENTOFFSET = density * 2.1F;
137+
132138
if (attrs != null) {
133139
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.pickerview, 0, 0);
134140
mGravity = a.getInt(R.styleable.pickerview_pickerview_gravity, Gravity.CENTER);
@@ -234,15 +240,22 @@ private void measureTextWidthHeight() {
234240
for (int i = 0; i < adapter.getItemsCount(); i++) {
235241
String s1 = getContentText(adapter.getItem(i));
236242
paintCenterText.getTextBounds(s1, 0, s1.length(), rect);
243+
237244
int textWidth = rect.width();
245+
int textHeight = rect.height();
246+
238247
if (textWidth > maxTextWidth) {
239248
maxTextWidth = textWidth;
240249
}
241-
paintCenterText.getTextBounds("\u661F\u671F", 0, 2, rect); // 星期的字符编码(设置item高度为两个汉字高度)
242-
int textHeight = rect.height();
243-
if (textHeight > maxTextHeight) {
250+
paintCenterText.getTextBounds("\u661F\u671F", 0, 2, rect); // 星期的字符编码(以它为标准高度)
251+
int standardHeight = rect.height();
252+
253+
if (textHeight > maxTextHeight) {//所有Item文字的最大高度
244254
maxTextHeight = textHeight;
245255
}
256+
if (maxTextHeight<standardHeight){//没有超过标准高度,设为标准高度
257+
maxTextHeight = standardHeight;
258+
}
246259
}
247260
itemHeight = lineSpacingMultiplier * maxTextHeight;
248261
}
@@ -610,7 +623,7 @@ public boolean onTouchEvent(MotionEvent event) {
610623
default:
611624
if (!eventConsumed) {//屏幕点击或者拖拽事件
612625
float y = event.getY();
613-
// 由于之前是有向右偏移90度,所以 实际弧度范围为α2 =π/2-α (α=[0,π])
626+
// 由于之前是有向右偏移90度,所以 实际弧度范围为α2 =π/2-α (α=[0,π] α2 = [-π/2,π/2]
614627
// 根据cosα = sin(π/2-α)
615628
// (radius - y) / radius = sinα2 = sin(π/2-α) = cosα
616629
// arccos(cosα)= α

pickerview/src/main/java/com/bigkoo/pickerview/view/BasePickerView.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
import android.content.Context;
66
import android.graphics.Color;
77
import android.view.Gravity;
8+
import android.view.KeyEvent;
89
import android.view.LayoutInflater;
910
import android.view.MotionEvent;
1011
import android.view.View;
1112
import android.view.ViewGroup;
1213
import android.view.animation.Animation;
1314
import android.view.animation.AnimationUtils;
14-
import android.widget.Button;
1515
import android.widget.FrameLayout;
1616

1717
import com.bigkoo.pickerview.R;
@@ -93,7 +93,7 @@ public void onClick(View view) {
9393
contentContainer = (ViewGroup) rootView.findViewById(R.id.content_container);
9494
contentContainer.setLayoutParams(params);
9595
}
96-
96+
setKeyBackCancelable(true);
9797

9898
}
9999

@@ -210,7 +210,7 @@ public BasePickerView setOnDismissListener(OnDismissListener onDismissListener)
210210
return this;
211211
}
212212

213-
/*public BasePickerView setKeyBackCancelable(boolean isCancelable) {
213+
public BasePickerView setKeyBackCancelable(boolean isCancelable) {
214214
rootView.setFocusable(isCancelable);
215215
rootView.setFocusableInTouchMode(isCancelable);
216216
if (isCancelable) {
@@ -232,7 +232,7 @@ && isShowing()){
232232
}
233233
return false;
234234
}
235-
} ;*/
235+
} ;
236236

237237
protected BasePickerView setOutSideCancelable(boolean isCancelable) {
238238
if (rootView != null) {

0 commit comments

Comments
 (0)