实现效果
个人感觉做的还是满Q弹的
如何使用?
compile 'com.github.michaelye.easydialog:easydialog:1.4'
- 1
其实也就是一个类和几个layout文件,建议直接copy进你的项目还更方便点。
项目结构:
因为标注的很清晰,直接就贴代码看,不做什么解释了,如有什么不理解可以留言可以回答你的问题
核心类EasyDialog
public class EasyDialog
{
private Context context;
/**
* 内容在三角形上面
*/
public static final int GRAVITY_TOP = 0;
/**
* 内容在三角形下面
*/
public static final int GRAVITY_BOTTOM = 1;
/**
* 对话框本身
*/
private Dialog dialog;
/**
* 坐标
*/
private int[] location;
/**
* 提醒框位置
*/
private int gravity;
/**
* 外面传递进来的View
*/
private View contentView;
/**
* 三角形
*/
private ImageView ivTriangle;
/**
* 用来放外面传递进来的View
*/
private LinearLayout llContent;
/**
* 触摸外面,是否关闭对话框
*/
private boolean touchOutsideDismiss;
/**
* 提示框所在的容器
*/
private RelativeLayout rlOutsideBackground;
public EasyDialog(Context context)
{
initDialog(context);
}
private void initDialog(final Context context)
{
this.context = context;
LayoutInflater layoutInflater = ((Activity) context).getLayoutInflater();
View dialogView = layoutInflater.inflate(R.layout.layout_dialog, null);
ViewTreeObserver viewTreeObserver = dialogView.getViewTreeObserver();
viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener()
{
@Override
public void onGlobalLayout()
{
//当View可以获取宽高的时候,设置view的位置
relocation(location);
}
});
rlOutsideBackground = (RelativeLayout) dialogView.findViewById(R.id.rlOutsideBackground);
rlOutsideBackground.setOnTouchListener(new View.OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
if (touchOutsideDismiss && dialog != null)
{
onDialogDismiss();
}
return false;
}
});
ivTriangle = (ImageView) dialogView.findViewById(R.id.ivTriangle);
llContent = (LinearLayout) dialogView.findViewById(R.id.llContent);
dialog = new Dialog(context, isFullScreen() ? android.R.style.Theme_Translucent_NoTitleBar_Fullscreen : android.R.style.Theme_Translucent_NoTitleBar);
dialog.setContentView(dialogView);
animatorSetForDialogShow = new AnimatorSet();
animatorSetForDialogDismiss = new AnimatorSet();
objectAnimatorsForDialogShow = new ArrayList<>();
objectAnimatorsForDialogDismiss = new ArrayList<>();
ini();
}
/**
* 初始化默认值
*/
private void ini()
{
this.setLocation(new int[]{0, 0})
.setGravity(GRAVITY_BOTTOM)
.setTouchOutsideDismiss(true)
.setOutsideColor(Color.TRANSPARENT)
.setBackgroundColor(Color.BLUE)
.setMatchParent(true)
.setMarginLeftAndRight(24, 24);
}
/**
* 设置提示框中要显示的内容
*/
public EasyDialog setLayout(View layout)
{
if (layout != null)
{
this.contentView = layout;
}
return this;
}
/**
* 设置提示框中要显示的内容的布局Id
*/
public EasyDialog setLayoutResourceId(int layoutResourceId)
{
View view = ((Activity) context).getLayoutInflater().inflate(layoutResourceId, null);
setLayout(view);
return this;
}
/**
* 设置三角形所在的位置
*/
public EasyDialog setLocation(int[] location)
{
this.location = location;
return this;
}
/**
* 设置三角形所在的位置
* location.x坐标值为attachedView所在屏幕位置的中心
* location.y坐标值依据当前的gravity,如果gravity是top,则为控件上方的y值,如果是bottom,则为控件的下方的y值
* <p/>
*
* @param attachedView 在哪个View显示提示信息
*/
public EasyDialog setLocationByAttachedView(View attachedView)
{
if (attachedView != null)
{
this.attachedView = attachedView;
int[] attachedViewLocation = new int[2];
attachedView.getLocationOnScreen(attachedViewLocation);
attachedViewLocation[0] = attachedViewLocation[0] + attachedView.getWidth() / 2;
switch (gravity)
{
case GRAVITY_BOTTOM:
attachedViewLocation[1] = attachedViewLocation[1] + attachedView.getHeight();
break;
case GRAVITY_TOP:
break;
}
setLocation(attachedViewLocation);
}
return this;
}
/**
* 对话框所依附的View
* */
private View attachedView = null;
/**
* 设置显示的内容在上方还是下方,如果设置错误,默认是在下方
*/
public EasyDialog setGravity(int gravity)
{
if (gravity != GRAVITY_BOTTOM && gravity != GRAVITY_TOP)
{
gravity = GRAVITY_BOTTOM;
}
this.gravity = gravity;
switch (this.gravity)
{
case GRAVITY_BOTTOM:
ivTriangle.setBackgroundResource(R.drawable.triangle_bottom);
break;
case GRAVITY_TOP:
ivTriangle.setBackgroundResource(R.drawable.triangle_top);
break;
}
llContent.setBackgroundResource(R.drawable.round_corner_bg);
if(attachedView != null)//如果用户调用setGravity()之前就调用过setLocationByAttachedView,需要再调用一次setLocationByAttachedView
{
this.setLocationByAttachedView(attachedView);
}
this.setBackgroundColor(backgroundColor);
return this;
}
/**
* 设置是否填充屏幕,如果不填充就适应布局内容的宽度,显示内容的位置会尽量随着三角形的位置居中
*/
public EasyDialog setMatchParent(boolean matchParent)
{
ViewGroup.LayoutParams layoutParams = llContent.getLayoutParams();
layoutParams.width = matchParent ? ViewGroup.LayoutParams.MATCH_PARENT : ViewGroup.LayoutParams.WRAP_CONTENT;
llContent.setLayoutParams(layoutParams);
return this;
}
/**
* 距离屏幕左右的边距
*/
public EasyDialog setMarginLeftAndRight(int left, int right)
{
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) llContent.getLayoutParams();
layoutParams.setMargins(left, 0, right, 0);
llContent.setLayoutParams(layoutParams);
return this;
}
/**
* 设置触摸对话框外面,对话框是否消失
*/
public EasyDialog setTouchOutsideDismiss(boolean touchOutsideDismiss)
{
this.touchOutsideDismiss = touchOutsideDismiss;
return this;
}
/**
* 设置提醒框外部区域的颜色
*/
public EasyDialog setOutsideColor(int color)
{
rlOutsideBackground.setBackgroundColor(color);
return this;
}
private int backgroundColor;
/**
* 设置对话框的颜色
* <p/>
* 三角形的图片是layer-list里面嵌套一个RotateDrawable,在设置颜色的时候需要特别处理
* http://stackoverflow.com/questions/24492000/set-color-of-triangle-on-run-time
* http://stackoverflow.com/questions/16636412/change-shape-solid-color-at-runtime-inside-drawable-xml-used-as-background
*/
public EasyDialog setBackgroundColor(int color)
{
backgroundColor = color;
LayerDrawable drawableTriangle = (LayerDrawable) ivTriangle.getBackground();
GradientDrawable shapeTriangle = (GradientDrawable) (((RotateDrawable) drawableTriangle.findDrawableByLayerId(R.id.shape_id)).getDrawable());
if (shapeTriangle != null)
{
shapeTriangle.setColor(color);
}
else
{
Toast.makeText(context, "shape is null", Toast.LENGTH_SHORT).show();
}
GradientDrawable drawableRound = (GradientDrawable) llContent.getBackground();
if (drawableRound != null)
{
drawableRound.setColor(color);
}
return this;
}
/**
* 显示提示框
*/
public EasyDialog show()
{
if (dialog != null)
{
if (contentView == null)
{
throw new RuntimeException("您是否未调用setLayout()或者setLayoutResourceId()方法来设置要显示的内容呢?");
}
llContent.addView(contentView);
dialog.show();
onDialogShowing();
}
return this;
}
/**
* 显示对话框的View的parent,如果想自己写动画,可以获取这个实例来写动画
*
* */
public View getTipViewInstance()
{
return rlOutsideBackground.findViewById(R.id.rlParentForAnimate);
}
/**横向*/
public static final int DIRECTION_X = 0;
/**纵向*/
public static final int DIRECTION_Y = 1;
/**
* 水平动画
*
* @param direction 动画的方向
* @param duration 动画执行的时间长度
* @param values 动画移动的位置
* */
public EasyDialog setAnimationTranslationShow(int direction, int duration, float... values)
{
return setAnimationTranslation(true, direction, duration, values);
}
/**
* 水平动画
*
* @param direction 动画的方向
* @param duration 动画执行的时间长度
* @param values 动画移动的位置
* */
public EasyDialog setAnimationTranslationDismiss(int direction, int duration, float... values)
{
return setAnimationTranslation(false, direction, duration, values);
}
private EasyDialog setAnimationTranslation(boolean isShow, int direction, int duration, float... values)
{
if(direction != DIRECTION_X && direction != DIRECTION_Y)
{
direction = DIRECTION_X;
}
String propertyName = "";
switch (direction)
{
case DIRECTION_X:
propertyName = "translationX";
break;
case DIRECTION_Y:
propertyName = "translationY";
break;
}
ObjectAnimator animator = ObjectAnimator.ofFloat(rlOutsideBackground.findViewById(R.id.rlParentForAnimate), propertyName, values)
.setDuration(duration);
if(isShow)
{
objectAnimatorsForDialogShow.add(animator);
}
else
{
objectAnimatorsForDialogDismiss.add(animator);
}
return this;
}
/**
* 对话框出现时候的渐变动画
*
* @param duration 动画执行的时间长度
* @param values 动画移动的位置
* */
public EasyDialog setAnimationAlphaShow(int duration, float... values)
{
return setAnimationAlpha(true, duration, values);
}
/**
* 对话框消失时候的渐变动画
*
* @param duration 动画执行的时间长度
* @param values 动画移动的位置
* */
public EasyDialog setAnimationAlphaDismiss(int duration, float... values)
{
return setAnimationAlpha(false, duration, values);
}
private EasyDialog setAnimationAlpha(boolean isShow, int duration, float... values)
{
ObjectAnimator animator = ObjectAnimator.ofFloat(rlOutsideBackground.findViewById(R.id.rlParentForAnimate), "alpha", values).setDuration(duration);
if(isShow)
{
objectAnimatorsForDialogShow.add(animator);
}
else
{
objectAnimatorsForDialogDismiss.add(animator);
}
return this;
}
private AnimatorSet animatorSetForDialogShow;
private AnimatorSet animatorSetForDialogDismiss;
private List<Animator> objectAnimatorsForDialogShow;
private List<Animator> objectAnimatorsForDialogDismiss;
private void onDialogShowing()
{
if(animatorSetForDialogShow != null && objectAnimatorsForDialogShow != null && objectAnimatorsForDialogShow.size() > 0)
{
animatorSetForDialogShow.playTogether(objectAnimatorsForDialogShow);
animatorSetForDialogShow.start();
}
//TODO 缩放的动画效果不好,不能从控件所在的位置开始缩放
// ObjectAnimator.ofFloat(rlOutsideBackground.findViewById(R.id.rlParentForAnimate), "scaleX", 0.3f, 1.0f).setDuration(500).start();
// ObjectAnimator.ofFloat(rlOutsideBackground.findViewById(R.id.rlParentForAnimate), "scaleY", 0.3f, 1.0f).setDuration(500).start();
}
private void onDialogDismiss()
{
if(animatorSetForDialogDismiss.isRunning())
{
return;
}
if(animatorSetForDialogDismiss != null && objectAnimatorsForDialogDismiss != null && objectAnimatorsForDialogDismiss.size() > 0)
{
animatorSetForDialogDismiss.playTogether(objectAnimatorsForDialogDismiss);
animatorSetForDialogDismiss.start();
animatorSetForDialogDismiss.addListener(new Animator.AnimatorListener()
{
@Override
public void onAnimationStart(Animator animation)
{
}
@Override
public void onAnimationEnd(Animator animation)
{
dialog.dismiss();
}
@Override
public void onAnimationCancel(Animator animation)
{
}
@Override
public void onAnimationRepeat(Animator animation)
{
}
});
}
else
{
dialog.dismiss();
}
}
/**
* 关闭提示框
*/
public void dismiss()
{
if (dialog != null && dialog.isShowing())
{
onDialogDismiss();
}
}
/**
* 根据x,y,重新设置控件的位置
* <p/>
* 因为setX setY为0的时候,都是在状态栏以下的,所以app不是全屏的话,需要扣掉状态栏的高度
*/
private void relocation(int[] location)
{
ivTriangle.setX(location[0] - ivTriangle.getWidth() / 2);
ivTriangle.setY(location[1] - ivTriangle.getHeight() / 2 - (isFullScreen() ? 0.0f : getStatusBarHeight()));//因为三角形是通过XML绘制出来的,可以到activity_tip_overlay.xml中把三角形的那个ImageView背景设置一下,就知道什么情况了。所以需要减掉一半的高度
switch (gravity)
{
case GRAVITY_BOTTOM:
llContent.setY(location[1] - ivTriangle.getHeight() / 2 - (isFullScreen() ? 0.0f : getStatusBarHeight()) + ivTriangle.getHeight());
break;
case GRAVITY_TOP:
llContent.setY(location[1] - llContent.getHeight() - (isFullScreen() ? 0.0f : getStatusBarHeight()) - ivTriangle.getHeight() / 2);
break;
}
//显示内容的区域往三角形靠拢
int triangleCenterX = (int)(ivTriangle.getX() + ivTriangle.getWidth()/2);//三角形的中心点
int contentWidth = llContent.getWidth();
int rightMargin = getScreenWidth() - triangleCenterX;//三角形中心距离屏幕右边的距离
int leftMargin = getScreenWidth() - rightMargin;//三角形中心距离屏幕左边的距离
RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams) llContent.getLayoutParams();
int availableLeftMargin = leftMargin - layoutParams.leftMargin;//左边可用的距离
int availableRightMargin = rightMargin - layoutParams.rightMargin;//右边可用的距离
int x = 0;
if(contentWidth/2 <= availableLeftMargin && contentWidth/2 <= availableRightMargin)//左右两边有足够的距离
{
x = triangleCenterX - contentWidth/2;
}
else
{
if(availableLeftMargin <= availableRightMargin)//判断三角形在屏幕中心的左边
{
x = layoutParams.leftMargin;
}
else//三角形在屏幕中心的右边
{
x = getScreenWidth() - (contentWidth + layoutParams.rightMargin);
}
}
llContent.setX(x);
}
/**
* 获取屏幕的宽度
* */
private int getScreenWidth()
{
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
return metrics.widthPixels;
}
/**
* 获取状态栏的高度
*/
private int getStatusBarHeight()
{
int result = 0;
int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0)
{
result = context.getResources().getDimensionPixelSize(resourceId);
}
return result;
}
/**
* 判断下当前要显示对话框的Activity是否是全屏
*/
public boolean isFullScreen()
{
int flg = ((Activity) context).getWindow().getAttributes().flags;
boolean flag = false;
if ((flg & 1024) == 1024)
{
flag = true;
}
return flag;
}
/**
* 设置是否可以按返回按钮取消
* */
public EasyDialog setCancelable(boolean cancelable)
{
dialog.setCancelable(cancelable);
return this;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
- 176
- 177
- 178
- 179
- 180
- 181
- 182
- 183
- 184
- 185
- 186
- 187
- 188
- 189
- 190
- 191
- 192
- 193
- 194
- 195
- 196
- 197
- 198
- 199
- 200
- 201
- 202
- 203
- 204
- 205
- 206
- 207
- 208
- 209
- 210
- 211
- 212
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253
- 254
- 255
- 256
- 257
- 258
- 259
- 260
- 261
- 262
- 263
- 264
- 265
- 266
- 267
- 268
- 269
- 270
- 271
- 272
- 273
- 274
- 275
- 276
- 277
- 278
- 279
- 280
- 281
- 282
- 283
- 284
- 285
- 286
- 287
- 288
- 289
- 290
- 291
- 292
- 293
- 294
- 295
- 296
- 297
- 298
- 299
- 300
- 301
- 302
- 303
- 304
- 305
- 306
- 307
- 308
- 309
- 310
- 311
- 312
- 313
- 314
- 315
- 316
- 317
- 318
- 319
- 320
- 321
- 322
- 323
- 324
- 325
- 326
- 327
- 328
- 329
- 330
- 331
- 332
- 333
- 334
- 335
- 336
- 337
- 338
- 339
- 340
- 341
- 342
- 343
- 344
- 345
- 346
- 347
- 348
- 349
- 350
- 351
- 352
- 353
- 354
- 355
- 356
- 357
- 358
- 359
- 360
- 361
- 362
- 363
- 364
- 365
- 366
- 367
- 368
- 369
- 370
- 371
- 372
- 373
- 374
- 375
- 376
- 377
- 378
- 379
- 380
- 381
- 382
- 383
- 384
- 385
- 386
- 387
- 388
- 389
- 390
- 391
- 392
- 393
- 394
- 395
- 396
- 397
- 398
- 399
- 400
- 401
- 402
- 403
- 404
- 405
- 406
- 407
- 408
- 409
- 410
- 411
- 412
- 413
- 414
- 415
- 416
- 417
- 418
- 419
- 420
- 421
- 422
- 423
- 424
- 425
- 426
- 427
- 428
- 429
- 430
- 431
- 432
- 433
- 434
- 435
- 436
- 437
- 438
- 439
- 440
- 441
- 442
- 443
- 444
- 445
- 446
- 447
- 448
- 449
- 450
- 451
- 452
- 453
- 454
- 455
- 456
- 457
- 458
- 459
- 460
- 461
- 462
- 463
- 464
- 465
- 466
- 467
- 468
- 469
- 470
- 471
- 472
- 473
- 474
- 475
- 476
- 477
- 478
- 479
- 480
- 481
- 482
- 483
- 484
- 485
- 486
- 487
- 488
- 489
- 490
- 491
- 492
- 493
- 494
- 495
- 496
- 497
- 498
- 499
- 500
- 501
- 502
- 503
- 504
- 505
- 506
- 507
- 508
- 509
- 510
- 511
- 512
- 513
- 514
- 515
- 516
- 517
- 518
- 519
- 520
- 521
- 522
- 523
- 524
- 525
- 526
- 527
- 528
- 529
- 530
- 531
- 532
- 533
- 534
- 535
- 536
- 537
- 538
- 539
- 540
- 541
- 542
- 543
- 544
- 545
- 546
- 547
- 548
- 549
- 550
- 551
MainActivity
public class MainActivity extends ActionBarActivity implements View.OnClickListener
{
private RelativeLayout rlBackground;
private Button btnTopLeft;
private Button btnTopRight;
private Button btnMiddleTop;
private Button btnMiddleBottom;
private Button btnBottomLeft;
private Button btnBottomRight;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iniComponent();
}
private void iniComponent()
{
rlBackground = (RelativeLayout)findViewById(R.id.rlBackground);
btnTopLeft = (Button) findViewById(R.id.btnTopLeft);
btnTopRight = (Button) findViewById(R.id.btnTopRight);
btnMiddleTop = (Button) findViewById(R.id.btnMiddleTop);
btnMiddleBottom = (Button) findViewById(R.id.btnMiddleBottom);
btnBottomLeft = (Button) findViewById(R.id.btnBottomLeft);
btnBottomRight = (Button) findViewById(R.id.btnBottomRight);
btnTopLeft.setOnClickListener(this);
btnTopRight.setOnClickListener(this);
btnMiddleTop.setOnClickListener(this);
btnMiddleBottom.setOnClickListener(this);
btnBottomLeft.setOnClickListener(this);
btnBottomRight.setOnClickListener(this);
rlBackground.setOnTouchListener(new View.OnTouchListener()
{
@Override
public boolean onTouch(View v, MotionEvent event)
{
int[] location = new int[2];
location[0] = (int)event.getX();
location[1] = (int)event.getY();
location[1] = location[1] + getActionBarHeight() + getStatusBarHeight();
Toast.makeText(MainActivity.this, "x:" + location[0] + " y:" + location[1], Toast.LENGTH_SHORT).show();
new EasyDialog(MainActivity.this)
.setLayoutResourceId(R.layout.layout_tip_content_horizontal)
.setBackgroundColor(MainActivity.this.getResources().getColor(R.color.background_color_black))
.setLocation(location)
.setGravity(EasyDialog.GRAVITY_TOP)
.setTouchOutsideDismiss(true)
.setMatchParent(false)
.setMarginLeftAndRight(24, 24)
.setOutsideColor(MainActivity.this.getResources().getColor(R.color.outside_color_gray))
.show();
return false;
}
});
}
@Override
public void onClick(View v)
{
switch (v.getId())
{
case R.id.btnTopLeft:
View view = this.getLayoutInflater().inflate(R.layout.layout_tip_content_horizontal, null);
new EasyDialog(MainActivity.this)
.setLayout(view)
.setBackgroundColor(MainActivity.this.getResources().getColor(R.color.background_color_black))
.setLocationByAttachedView(btnTopLeft)
.setGravity(EasyDialog.GRAVITY_BOTTOM)
.setAnimationTranslationShow(EasyDialog.DIRECTION_X, 1000, -600, 100, -50, 50, 0)
.setAnimationAlphaShow(1000, 0.3f, 1.0f)
.setAnimationTranslationDismiss(EasyDialog.DIRECTION_X, 500, -50, 800)
.setAnimationAlphaDismiss(500, 1.0f, 0.0f)
.setTouchOutsideDismiss(true)
.setMatchParent(true)
.setMarginLeftAndRight(24, 24)
.setOutsideColor(MainActivity.this.getResources().getColor(R.color.outside_color_trans))
.show();
break;
case R.id.btnTopRight:
new EasyDialog(MainActivity.this)
.setLayoutResourceId(R.layout.layout_tip_image_text)
.setGravity(EasyDialog.GRAVITY_BOTTOM)
.setBackgroundColor(MainActivity.this.getResources().getColor(R.color.background_color_black))
.setLocationByAttachedView(btnTopRight)
.setAnimationTranslationShow(EasyDialog.DIRECTION_X, 350, 400, 0)
.setAnimationTranslationDismiss(EasyDialog.DIRECTION_X, 350, 0, 400)
.setTouchOutsideDismiss(true)
.setMatchParent(false)
.setMarginLeftAndRight(24, 24)
.setOutsideColor(MainActivity.this.getResources().getColor(R.color.outside_color_trans))
.show();
break;
case R.id.btnMiddleTop:
new EasyDialog(MainActivity.this)
.setLayoutResourceId(R.layout.layout_tip_content_horizontal)
.setBackgroundColor(MainActivity.this.getResources().getColor(R.color.background_color_blue))
.setLocationByAttachedView(btnMiddleTop)
.setAnimationTranslationShow(EasyDialog.DIRECTION_Y, 1000, -800, 100, -50, 50, 0)
.setAnimationTranslationDismiss(EasyDialog.DIRECTION_Y, 500, 0, -800)
.setGravity(EasyDialog.GRAVITY_TOP)
.setTouchOutsideDismiss(true)
.setMatchParent(false)
.setMarginLeftAndRight(24, 24)
.setOutsideColor(MainActivity.this.getResources().getColor(R.color.outside_color_pink))
.show();
break;
case R.id.btnMiddleBottom:
new EasyDialog(MainActivity.this)
.setLayoutResourceId(R.layout.layout_tip_content_horizontal)
.setGravity(EasyDialog.GRAVITY_BOTTOM)
.setBackgroundColor(MainActivity.this.getResources().getColor(R.color.background_color_brown))
.setLocationByAttachedView(btnMiddleBottom)
.setAnimationTranslationShow(EasyDialog.DIRECTION_Y, 1000, 800, -100, -50, 50, 0)
.setAnimationTranslationDismiss(EasyDialog.DIRECTION_Y, 500, 0, 800)
.setAnimationAlphaShow(1000, 0.3f, 1.0f)
.setTouchOutsideDismiss(true)
.setMatchParent(true)
.setMarginLeftAndRight(24, 24)
.setOutsideColor(MainActivity.this.getResources().getColor(R.color.outside_color_gray))
.show();
break;
case R.id.btnBottomLeft:
new EasyDialog(MainActivity.this)
.setLayoutResourceId(R.layout.layout_tip_text)
.setBackgroundColor(MainActivity.this.getResources().getColor(R.color.background_color_pink))
.setLocationByAttachedView(btnBottomLeft)
.setGravity(EasyDialog.GRAVITY_TOP)
.setAnimationAlphaShow(600, 0.0f, 1.0f)
.setAnimationAlphaDismiss(600, 1.0f, 0.0f)
.setTouchOutsideDismiss(true)
.setMatchParent(false)
.setMarginLeftAndRight(24, 24)
.setOutsideColor(MainActivity.this.getResources().getColor(R.color.outside_color_trans))
.show();
break;
case R.id.btnBottomRight:
new EasyDialog(MainActivity.this)
.setLayoutResourceId(R.layout.layout_tip_image_text)
.setBackgroundColor(MainActivity.this.getResources().getColor(R.color.background_color_yellow))
.setLocationByAttachedView(btnBottomRight)
.setGravity(EasyDialog.GRAVITY_TOP)
.setAnimationTranslationShow(EasyDialog.DIRECTION_X, 300, 400, 0)
.setAnimationTranslationShow(EasyDialog.DIRECTION_Y, 300, 400, 0)
.setAnimationTranslationDismiss(EasyDialog.DIRECTION_X, 300, 0, 400)
.setAnimationTranslationDismiss(EasyDialog.DIRECTION_Y, 300, 0, 400)
.setTouchOutsideDismiss(true)
.setMatchParent(false)
.setMarginLeftAndRight(24, 24)
.setOutsideColor(MainActivity.this.getResources().getColor(R.color.outside_color_trans))
.show();
break;
}
}
private int getStatusBarHeight()
{
int result = 0;
int resourceId = this.getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0)
{
result = this.getResources().getDimensionPixelSize(resourceId);
}
return result;
}
private int getActionBarHeight()
{
return this.getSupportActionBar().getHeight();
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 155
- 156
- 157
- 158
- 159
- 160
- 161
- 162
- 163
- 164
- 165
- 166
- 167
- 168
- 169
- 170
- 171
- 172
- 173
- 174
- 175
布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rlBackground"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginTop="20dp"
>
<Button
android:id="@+id/btnTopLeft"
android:text="Click Me"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:background="#CCCCCC"
/>
<Button
android:id="@+id/btnTopRight"
android:text="Click Me"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:background="#CCCCCC"
/>
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:orientation="vertical">
<Button
android:id="@+id/btnMiddleTop"
android:text="Click Me"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#CCCCCC"
/>
<Button
android:id="@+id/btnMiddleBottom"
android:text="Click Me"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:background="#CCCCCC"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="10dip"
android:orientation="horizontal">
<Button
android:id="@+id/btnBottomLeft"
android:text="Click Me"
android:layout_weight="1"
android:layout_width="wrap_content"
android:layout_margin="10dip"
android:layout_height="wrap_content"
android:background="#CCCCCC"
/>
<Button
android:id="@+id/btnBottomRight"
android:text="Click Me"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dip"
android:background="#CCCCCC"
/>
</LinearLayout>
</RelativeLayout>