diff --git a/Readme.md b/Readme.md index c8e29bd..e349c7a 100644 --- a/Readme.md +++ b/Readme.md @@ -1,5 +1,5 @@ -#XFrame — Android快速开发框架(还在整理中) +#XFrame — Android快速开发框架(还在整理中,可以先star,先不要用于量产模式) >从小的功能做起,只做必要的封装,让开发更加简单 ———— XFrame @@ -9,11 +9,13 @@ 为什么呢?这些功能现在都有很强大的框架,我也做不到那么好,而且更新很快,隔段时间就有新的框架出现,每个人都有自己的选择,我不想使用者因为这个局限大家。 我的本意是为了通过封装Android中一些的复杂操作而达到简化Android应用级开发的成本,用最少的代码实现更多的功能,我们只封装那些大部分应用必须用到但有总是增加我们繁琐的工作量。也许市面上单个功能模块有现成,而且很多!我们总是需要去挨着选择,但他们之间并不一定兼容,我们需要浪费在每个项目中的修改、拷贝、维护时间,而XFrame算是你还不错的选择对象! +[Banner轮播框架连接](https://github.com/youth5201314/banner) + [详细文档请前往wiki](https://github.com/youth5201314/XFrame/wiki) ## 特性 -**XFrame**主要有这些功能: +**XFrame**主要有这些功能:(打钩的标示第一版本已完成,其他还在整理中) - [x] `XLog`:可输出漂亮容易查看的日志,支持Json、Xml、Map、List等格式输出,可全局配置 - [x] `XLoadingView`:简单实用的页面状态统一管理 ,加载中、无网络、无数据、出错等状态的随意切换 diff --git a/app/src/main/java/com/youth/xf/BaseActivity.java b/app/src/main/java/com/youth/xf/BaseActivity.java index 9e61f99..ee3e81b 100644 --- a/app/src/main/java/com/youth/xf/BaseActivity.java +++ b/app/src/main/java/com/youth/xf/BaseActivity.java @@ -33,7 +33,7 @@ public void setContentView(int layoutResID) { } protected void setStatusBar() { - XStatusBar.setColor(this, getResources().getColor(R.color.colorPrimary)); + XStatusBar.setColor(this, getResources().getColor(R.color.colorPrimary),0); } @Override diff --git a/app/src/main/java/com/youth/xf/ui/demo/XToastActivity.java b/app/src/main/java/com/youth/xf/ui/demo/XToastActivity.java index 436c070..8703ea3 100644 --- a/app/src/main/java/com/youth/xf/ui/demo/XToastActivity.java +++ b/app/src/main/java/com/youth/xf/ui/demo/XToastActivity.java @@ -12,8 +12,6 @@ import com.youth.xframe.widget.XToast; public class XToastActivity extends BaseActivity implements View.OnClickListener { - - Button error; Button success; Button info; @@ -49,8 +47,10 @@ public void initView() { normalNoIcon.setOnClickListener(this); normalIcon.setOnClickListener(this); custom.setOnClickListener(this); + } + @Override public void onClick(View v) { switch (v.getId()){ diff --git a/app/src/main/java/com/youth/xf/utils/VideoUtils.java b/app/src/main/java/com/youth/xf/utils/VideoUtils.java new file mode 100644 index 0000000..b74e584 --- /dev/null +++ b/app/src/main/java/com/youth/xf/utils/VideoUtils.java @@ -0,0 +1,47 @@ +package com.youth.xf.utils; + +import android.annotation.TargetApi; +import android.graphics.Bitmap; +import android.media.MediaMetadataRetriever; +import android.media.ThumbnailUtils; +import android.os.Build; +import android.provider.MediaStore; + +import java.util.HashMap; + +public class VideoUtils { + + /** + * 获取视频缩略图,放在线程中执行,比较耗时 + * @param url 网络连接 + * @param width 图片宽度 + * @param height 突破高度 + * @return + */ + @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) + public static Bitmap createVideoThumbnail(String url, int width, int height) { + Bitmap bitmap = null; + MediaMetadataRetriever retriever = new MediaMetadataRetriever(); + int kind = MediaStore.Video.Thumbnails.MINI_KIND; + try { + if (Build.VERSION.SDK_INT >= 14) { + retriever.setDataSource(url, new HashMap()); + } else { + retriever.setDataSource(url); + } + bitmap = retriever.getFrameAtTime(); + } catch (IllegalArgumentException ex) { + } catch (RuntimeException ex) { + } finally { + try { + retriever.release(); + } catch (RuntimeException ex) { + } + } + if (kind == MediaStore.Images.Thumbnails.MICRO_KIND && bitmap != null) { + bitmap = ThumbnailUtils.extractThumbnail(bitmap, width, height, + ThumbnailUtils.OPTIONS_RECYCLE_INPUT); + } + return bitmap; + } +} diff --git a/app/src/main/res/layout/activity_xtoast.xml b/app/src/main/res/layout/activity_xtoast.xml index 04877bf..c9fed26 100644 --- a/app/src/main/res/layout/activity_xtoast.xml +++ b/app/src/main/res/layout/activity_xtoast.xml @@ -46,5 +46,4 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:text="自定义" /> - diff --git a/xframe/src/main/java/com/youth/xframe/utils/XBitmapUtils.java b/xframe/src/main/java/com/youth/xframe/utils/XBitmapUtils.java index d678adb..1ea3e48 100644 --- a/xframe/src/main/java/com/youth/xframe/utils/XBitmapUtils.java +++ b/xframe/src/main/java/com/youth/xframe/utils/XBitmapUtils.java @@ -360,7 +360,7 @@ public static Bitmap zoom(Bitmap bitmap, int w, int h) { } /** - * 获得圆角图片的方法 + * 获得圆角的Bitmap * * @param bitmap 源Bitmap * @param roundPx 圆角大小 @@ -389,7 +389,7 @@ public static Bitmap getRoundedCornerBitmap(Bitmap bitmap, float roundPx) { } /** - * 获得带倒影的图片方法 + * 获得带倒影的Bitmap * * @param bitmap 源Bitmap * @return 带倒影的Bitmap @@ -483,7 +483,7 @@ public static Bitmap convertGreyImg(Bitmap img) { } /** - * 转换图片成圆形 + * 获得圆形的Bitmap * * @param bitmap 传入Bitmap对象 * @return 圆形Bitmap @@ -664,7 +664,7 @@ public static Bitmap codec(Bitmap src, Bitmap.CompressFormat format, } /** - * 图片压缩方法:(使用compress的方法) + * 图片压缩处理(使用compress的方法) *

*
* 说明 如果bitmap本身的大小小于maxSize,则不作处理 @@ -764,7 +764,7 @@ public static Bitmap rotate(Bitmap bitmap, int angle) { } /** - * 水平翻转处理 + * 水平翻转图片 * * @param bitmap 原图 * @return 水平翻转后的图片 @@ -777,7 +777,7 @@ public static Bitmap reverseByHorizontal(Bitmap bitmap) { } /** - * 垂直翻转处理 + * 垂直翻转图片 * * @param bitmap 原图 * @return 垂直翻转后的图片 diff --git a/xframe/src/main/java/com/youth/xframe/utils/XDateUtils.java b/xframe/src/main/java/com/youth/xframe/utils/XDateUtils.java index cf19f0b..b36b62f 100644 --- a/xframe/src/main/java/com/youth/xframe/utils/XDateUtils.java +++ b/xframe/src/main/java/com/youth/xframe/utils/XDateUtils.java @@ -80,6 +80,7 @@ protected SimpleDateFormat initialValue() { return new SimpleDateFormat(); } }; + /** * 获取SimpleDateFormat实例 * @@ -94,7 +95,7 @@ public static SimpleDateFormat getSimpleDateFormat(String pattern) { } /** - * 获取表示当前时间的字符串 + * 获取当前时间的字符串 * * @return */ diff --git a/xframe/src/main/java/com/youth/xframe/utils/XRegexUtils.java b/xframe/src/main/java/com/youth/xframe/utils/XRegexUtils.java index a77047d..c4f5c70 100644 --- a/xframe/src/main/java/com/youth/xframe/utils/XRegexUtils.java +++ b/xframe/src/main/java/com/youth/xframe/utils/XRegexUtils.java @@ -43,7 +43,43 @@ public static String idHide(String id) { } /** - * 是否为车牌号(沪A88888) + * 简单验证用户名(字母、数字、下划线) + * + * @param username 用户名 + * @return 是否为用户名 + */ + + public static boolean checkUserName(String username) { + Pattern pattern = Pattern.compile("^\\w+$"); + return pattern.matcher(username).find(); + + } + /** + * 简单验证昵称(字母、数字、汉字、下划线) + * + * @param nickname 昵称 + * @return 是否为昵称 + */ + + public static boolean checkNickName(String nickname) { + Pattern pattern = Pattern.compile("\\w\\u4e00-\\u9fa5]+"); + return pattern.matcher(nickname).find(); + + } + /** + * 简单验证密码(6-16位、字母、数字、字符) + * + * @param password 密码 + * @return 是否为密码 + */ + + public static boolean checkPassword(String password) { + Pattern pattern = Pattern.compile("^(\\w|[`~!@#$%^&*()+=|{}':;',\\\\\\\\[\\\\\\\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]){6,16}$"); + return pattern.matcher(password).find(); + + } + /** + * 是否为车牌号(川A88888) * * @param vehicleNo 车牌号 * @return 是否为车牌号 @@ -62,7 +98,8 @@ public static boolean checkVehicleNo(String vehicleNo) { * @return 验证成功返回true,验证失败返回false */ public static boolean checkIdCard(String idCard) { - String regex = "[1-9]\\d{13,16}[a-zA-Z0-9]{1}"; + // 简单验证/^(\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$/ + String regex = "(^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$)|(^[1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{2}$)"; return Pattern.matches(regex, idCard); }