首页
统计
留言板
直播
更多
壁纸
推荐
Git仓库
Search
1
IntelliJ IDEA激活 - 至2022年10月 (持续更新)
645 阅读
2
GitLab企业版搭建(附生成证书)
626 阅读
3
淘宝 京东秒杀脚本
422 阅读
4
Groovy模板引擎 API 构建动态脚本
324 阅读
5
欢迎使用 Typecho
294 阅读
杂货间
开发
Java
JavaScript
Android
JQuery
MySQL
PHP
Groovy
Git
运维
CentOS
Red Heat
Ubuntu
Debian
运行环境
登录
/
注册
Search
标签搜索
开发
Java
Android
MySQL8
CentOS
CentOS8
Linux
Git
Swing
JavaScript
JQuery
MySQL
临时手机号
IDEA
Steam
YouTube
订阅
激活码
GitLab
nginx
Dotdotmaples
累计撰写
30
篇文章
累计收到
7
条评论
首页
栏目
杂货间
开发
Java
JavaScript
Android
JQuery
MySQL
PHP
Groovy
Git
运维
CentOS
Red Heat
Ubuntu
Debian
运行环境
页面
统计
留言板
直播
壁纸
推荐
Git仓库
搜索到
6
篇与
Android
的结果
Java 工具类
将一个类中的值通过setter和getter传递给另一个类型public static <T> T entityToDto(Object entity, Class<T> dtoType) { T instance; try { instance = dtoType.getDeclaredConstructor().newInstance(); } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) { throw new RuntimeException(e); } // 反射entity 获取getter Class<?> entryType = entity.getClass(); Arrays.stream(dtoType.getMethods()).filter( method -> method.getName().startsWith("set") ).forEach(method -> { String methodName = method.getName().replace("set", "get"); try { Object value = entryType.getMethod(methodName).invoke(entity); method.invoke(instance, value); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ignore) {} }); return instance; }
2022年05月12日
105 阅读
0 评论
1 点赞
计算Map初始容量算法
在实际开发中经常需要使用到Map,但给Map一个怎样的初始容量比较合理?众所周知是最接近(要大于)数据长度的2的N次方那么,如何计算?欢迎指出错误/** * 计算Map初始容量 * @author 枫铃也 * @since 2019-10-09 15:51 */ public class CapacityUtil { private static final double MODULE = 2; public static int getCapacityFactor(int size) { int n = size; int power = 0; while (n > 1) { power++; n >>>= 1; } int capacity = (int) Math.pow(MODULE, power); if (capacity < size || capacity % MODULE != 0) { capacity *= MODULE; } return capacity; } }欢迎指出错误
2019年10月11日
116 阅读
0 评论
1 点赞
2019-10-10
Java阿拉伯数字转中文数字
带单位转换的我只将数字范围定在十万以内的正数并且没考虑 0需要向上调整范围的童鞋自己修改代码呦欢迎指出错误先看效果再看代码不多说屁话上代码/** * <p>@description: 阿拉伯数字转中文数字(不带单位) </p> * <p>@method: numberConvertToBaseChinese </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-10 16:03 </p> * * <p>@return java.lang.String </p> */ public static String numberConvertToBaseChinese(int num) { StringBuffer buffer = new StringBuffer(); char[] nums = {'零', '一', '二', '三', '四', '五', '六', '七', '八', '九'}; char[] baseChar = Integer.toString(num).toCharArray(); for (char c : baseChar) { buffer.append(nums[c - 48]); } return buffer.toString(); } /** * <p>@description: 阿拉伯数字转中文数字(带单位) </p> * <p>@method: numberConvertToChinese </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-10 16:03 </p> * * <p>@return java.lang.String </p> */ public static String numberConvertToChinese(int num) { char[] nums = {'零', '一', '二', '三', '四', '五', '六', '七', '八', '九'}; char[] units = {' ', '十', '百', '千', '万'}; char[] baseChar = Integer.toString(num).toCharArray(); char[] numChar = new char[baseChar.length]; for (int i = 0; i < baseChar.length; i++) { numChar[i] = nums[baseChar[i] - 48]; } char[] unit = new char[numChar.length]; unit = Arrays.copyOf(units, unit.length); StringBuffer buffer = new StringBuffer(); for (int i = 0; i < numChar.length; i++) { if (numChar[i] != nums[0]) { buffer.append(numChar[i]).append(unit[unit.length - i - 1]); }else { buffer.append(numChar[i]); } } int index = 0; while ((index = buffer.indexOf(nums[0] + String.valueOf(nums[0]))) > 0) { buffer.replace(index, index + 2, String.valueOf(nums[0])); } return buffer.toString().substring(0, buffer.length() - 1); }神马,没有注释?我故意的(此处拒绝板砖和拖鞋之类的具有任何杀伤性的物品),嘿嘿自己看懂了才算是有收获欢迎指出错误
2019年10月10日
49 阅读
0 评论
0 点赞
日期工具类
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.TimeZone; /** * @author 枫铃也 * @since 2019-10-09 13:51 */ public class DateUtil { private static final TimeZone TIME_ZONE = TimeZone.getDefault(); private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public static String format(Date date) { return DATE_FORMAT.format(date); } /** * <p>@description: 得到当前日历 </p> * <p>@method: getCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:47 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getCalendar() { return Calendar.getInstance(TIME_ZONE); } /** * <p>@description: 得到当前秒的开始日历 </p> * <p>@method: getSecondStartCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getSecondStartCalendar() { Calendar calendar = getCalendar(); //将毫秒至0 calendar.set(Calendar.MILLISECOND, 0); return calendar; } /** * <p>@description: 得到上一秒的开始日历 </p> * <p>@method: getLastSecondStartCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getLastSecondStartCalendar() { Calendar calendar = getSecondStartCalendar(); //将秒为上一秒 calendar.set(Calendar.SECOND, calendar.get(Calendar.SECOND) - 1); return calendar; } /** * <p>@description: 得到下一秒的开始日历 </p> * <p>@method: getLaterSecondStartCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getLaterSecondStartCalendar() { Calendar calendar = getSecondStartCalendar(); //将秒为下一秒 calendar.set(Calendar.SECOND, calendar.get(Calendar.SECOND) + 1); return calendar; } /** * <p>@description: 得到当前秒的结束日历 </p> * <p>@method: getSecondEndCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getSecondEndCalendar() { Calendar calendar = getCalendar(); //将毫秒至999 calendar.set(Calendar.MILLISECOND, 999); return calendar; } /** * <p>@description: 得到上一秒的结束日历 </p> * <p>@method: getLastSecondEndCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getLastSecondEndCalendar() { Calendar calendar = getSecondEndCalendar(); //将秒置上一秒 calendar.set(Calendar.SECOND, calendar.get(Calendar.SECOND) - 1); return calendar; } /** * <p>@description: 得到下一秒的结束日历 </p> * <p>@method: getLaterSecondEndCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getLaterSecondEndCalendar() { Calendar calendar = getSecondEndCalendar(); //将秒置下一秒 calendar.set(Calendar.SECOND, calendar.get(Calendar.SECOND) + 1); return calendar; } /** * <p>@description: 得到当前分钟的开始日历 </p> * <p>@method: getMinuteStartCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getMinuteStartCalendar() { Calendar calendar = getSecondStartCalendar(); //将秒至0 calendar.set(Calendar.SECOND, 0); return calendar; } /** * <p>@description: 得到上一分钟的开始日历 </p> * <p>@method: getLastMinuteStartCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getLastMinuteStartCalendar() { Calendar calendar = getMinuteStartCalendar(); //将分钟置上一分钟 calendar.set(Calendar.MINUTE, calendar.get(Calendar.MINUTE) - 1); return calendar; } /** * <p>@description: 得到下一分钟的开始日历 </p> * <p>@method: getLaterMinuteStartCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getLaterMinuteStartCalendar() { Calendar calendar = getMinuteStartCalendar(); //将分钟置下一分钟 calendar.set(Calendar.MINUTE, calendar.get(Calendar.MINUTE) + 1); return calendar; } /** * <p>@description: 得到当前分钟的结束日历 </p> * <p>@method: getMinuteEndCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getMinuteEndCalendar() { Calendar calendar = getSecondEndCalendar(); //将秒至59 calendar.set(Calendar.SECOND, 59); return calendar; } /** * <p>@description: 得到上一分钟的结束日历 </p> * <p>@method: getLastMinuteEndCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getLastMinuteEndCalendar() { Calendar calendar = getMinuteEndCalendar(); //将分钟为上一分钟 calendar.set(Calendar.MINUTE, calendar.get(Calendar.MINUTE) - 1); return calendar; } /** * <p>@description: 得到下一分钟的结束日历 </p> * <p>@method: getLaterMinuteEndCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getLaterMinuteEndCalendar() { Calendar calendar = getMinuteEndCalendar(); //将分钟为下一分钟 calendar.set(Calendar.MINUTE, calendar.get(Calendar.MINUTE) + 1); return calendar; } /** * <p>@description: 得到当前小时的开始日历 </p> * <p>@method: getHourStartCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getHourStartCalendar() { Calendar calendar = getMinuteStartCalendar(); //将分钟置0 calendar.set(Calendar.MINUTE, 0); return calendar; } /** * <p>@description: 得到上一小时的开始日历 </p> * <p>@method: getLastHourStartCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getLastHourStartCalendar() { Calendar calendar = getHourStartCalendar(); //将小时置上一小时 calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) - 1); return calendar; } /** * <p>@description: 得到下一小时的开始日历 </p> * <p>@method: getLaterHourStartCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getLaterHourStartCalendar() { Calendar calendar = getHourStartCalendar(); //将小时置下一小时 calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) + 1); return calendar; } /** * <p>@description: 得到当前小时的结束日历 </p> * <p>@method: getHourEndCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getHourEndCalendar() { Calendar calendar = getMinuteEndCalendar(); //将分钟置59 calendar.set(Calendar.MINUTE, 59); return calendar; } /** * <p>@description: 得到上一小时的结束日历 </p> * <p>@method: getLastHourEndCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getLastHourEndCalendar() { Calendar calendar = getHourEndCalendar(); //将小时置上一小时 calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) - 1); return calendar; } /** * <p>@description: 得到下一小时的结束日历 </p> * <p>@method: getLaterHourEndCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getLaterHourEndCalendar() { Calendar calendar = getHourEndCalendar(); //将小时置下一小时 calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) + 1); return calendar; } /** * <p>@description: 得到当前日的开始日历 </p> * <p>@method: getDayStartCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getDayStartCalendar() { Calendar calendar = getHourStartCalendar(); //将小时置0 calendar.set(Calendar.HOUR_OF_DAY, 0); return calendar; } /** * <p>@description: 得到前一天的开始日历 </p> * <p>@method: getLastDayStartCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getLastDayStartCalendar() { Calendar calendar = getHourStartCalendar(); //将日设置为前一天 calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) - 1); return calendar; } /** * <p>@description: 得到后一天的开始日历 </p> * <p>@method: getLaterDayStartCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getLaterDayStartCalendar() { Calendar calendar = getHourStartCalendar(); //将日设置为后一天 calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) + 1); return calendar; } /** * <p>@description: 得到当前日的结束日历 </p> * <p>@method: getDayEndCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getDayEndCalendar() { Calendar calendar = getHourEndCalendar(); //将小时置23 calendar.set(Calendar.HOUR_OF_DAY, 23); return calendar; } /** * <p>@description: 得到前一日的结束日历 </p> * <p>@method: getLastDayEndCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getLastDayEndCalendar() { Calendar calendar = getDayEndCalendar(); //将日置前一日 calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) - 1); return calendar; } /** * <p>@description: 得到后一日的结束日历 </p> * <p>@method: getLaterDayEndCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getLaterDayEndCalendar() { Calendar calendar = getDayEndCalendar(); //将日置后一日 calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) + 1); return calendar; } /** * <p>@description: 得到当前月的开始日历 </p> * <p>@method: getMonthStartCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getMonthStartCalendar() { Calendar calendar = getDayStartCalendar(); //设置为1号 calendar.set(Calendar.DAY_OF_MONTH, 1); return calendar; } /** * <p>@description: 得到上个月的开始日历 </p> * <p>@method: getLastMonthStartCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getLastMonthStartCalendar() { Calendar calendar = getMonthStartCalendar(); //设置月为上一月 calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - 1); return calendar; } /** * <p>@description: 得到下个月的开始日历 </p> * <p>@method: getLaterMonthStartCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getLaterMonthStartCalendar() { Calendar calendar = getMonthStartCalendar(); //设置月为下一月 calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) + 1); return calendar; } /** * <p>@description: 得到当前月的结束日历 </p> * <p>@method: getMonthEndCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getMonthEndCalendar() { Calendar calendar = getDayEndCalendar(); //设置为最后一天 calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); return calendar; } /** * <p>@description: 得到上一月的结束日历 </p> * <p>@method: getLastMonthEndCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getLastMonthEndCalendar() { Calendar calendar = getMonthEndCalendar(); //设置月为上一月 calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - 1); return calendar; } /** * <p>@description: 得到下个月的结束日历 </p> * <p>@method: getLaterMonthEndCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getLaterMonthEndCalendar() { Calendar calendar = getMonthEndCalendar(); //设置月为下个月 calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) + 1); return calendar; } /** * <p>@description: 得到当前年的开始日历 </p> * <p>@method: getYearStartCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getYearStartCalendar() { Calendar calendar = getMonthStartCalendar(); //设置月为1月 calendar.set(Calendar.MONTH, 0); return calendar; } /** * <p>@description: 得到前一年的开始日历 </p> * <p>@method: getLastYearStartCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getLastYearStartCalendar() { Calendar calendar = getYearStartCalendar(); //设置年份为前一年 calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR) - 1); return calendar; } /** * <p>@description: 得到后一年的开始日历 </p> * <p>@method: getLaterYearStartCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getLaterYearStartCalendar() { Calendar calendar = getYearStartCalendar(); //设置年份为后一年 calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR) + 1); return calendar; } /** * <p>@description: 得到当前年的结束日历 </p> * <p>@method: getYearEndCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getYearEndCalendar() { Calendar calendar = getMonthEndCalendar(); //设置月为12月 calendar.set(Calendar.MONTH, 11); //设置为31号 calendar.set(Calendar.DAY_OF_MONTH, 31); return calendar; } /** * <p>@description: 得到上一年的结束日历 </p> * <p>@method: getLastYearEndCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getLastYearEndCalendar() { Calendar calendar = getYearEndCalendar(); //设置年为前一年 calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR) - 1); return calendar; } /** * <p>@description: 得到后一年的结束日历 </p> * <p>@method: getLaterYearEndCalendar </p> * <p>@author: 枫铃也 </p> * <p>@since: 2019-10-09 14:48 </p> * * <p>@return java.util.Calendar </p> */ public static Calendar getLaterYearEndCalendar() { Calendar calendar = getYearEndCalendar(); //设置年为后一年 calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR) + 1); return calendar; } public static void main(String[] args) { System.out.println("明年的开始:" + DateUtil.format(getLaterYearStartCalendar().getTime())); System.out.println("明年的结束:" + DateUtil.format(getLaterYearEndCalendar().getTime())); System.out.println("今年的开始:" + DateUtil.format(getYearStartCalendar().getTime())); System.out.println("今年的结束:" + DateUtil.format(getYearEndCalendar().getTime())); System.out.println("去年的开始:" + DateUtil.format(getLastYearStartCalendar().getTime())); System.out.println("去年的结束:" + DateUtil.format(getLastYearEndCalendar().getTime())); } }
2019年10月09日
61 阅读
0 评论
0 点赞
Java 8 的一些集合操作
将一个对象集合中的某一个字段取出来生成一个新的集合List<Store> storeList = storeService.listStore(page, size); List<Integer> collect = storeList.stream().map(s -> s.getStoreId()).collect(Collectors.toList()); //OR List<Integer> collect = storeList.stream().map(Store::getStoreId).collect(Collectors.toList());将List对象集合转化为key为对象ID的MapList<Specification> specifications = specificationService.listSpecification(); Map<Integer, Specification> collect = specifications.stream().collect(Collectors.toMap(Specification::getSpecificationId, Function.identity()));跟据某个属性分组Map<String, List<PersonData>> collect = list.stream().collect(Collectors.groupingBy(PersonData::getType));根据某个属性分组,汇总某个属性Map<String, Integer> collect2 = list.stream().collect(Collectors.groupingBy(PersonData::getType,Collectors.summingInt(PersonData::getAge)));根据某个属性添加条件过滤数据list = list.stream().filter(u -> !u.getType().equals("访客")).collect(Collectors.toList());判断一组对象里面有没有属性值是某个值boolean add = list.stream().anyMatch(m -> "王五".equals(m.getName()));
2019年10月02日
97 阅读
0 评论
0 点赞
2019-06-03
Android使用贝塞尔曲线画心形
一开始我只是想画个圆,可画着画着就成了心形,那就将错就错1. 创建一个Activity RelativeLayout container = findViewById(R.id.download_container); DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); deviceWidth = metrics.widthPixels; deviceHeight = metrics.heightPixels; Circle circle = new Circle(this, deviceWidth / 2, deviceHeight / 2, deviceWidth / 8); Line line = new Line(this, deviceWidth / 2, deviceHeight / 2, deviceWidth / 8); container.addView(line);2. 创建一个自定义的Viewimport android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.PointF; import android.view.View; public class Line extends View { private Paint mPaint; private PointF startPointF; private PointF endPointF; private PointF controlPointF1, controlPointF2; private PointF startPointF2; private PointF endPointF2; private PointF controlPointF3, controlPointF4; public Line(Context context, float x, float y, float radius) { super(context); double d = (2 * Math.sqrt(2) - 1); this.startPointF = new PointF(x, y - radius); this.endPointF = new PointF(x, y + radius / 10); this.controlPointF1 = new PointF(x, (float) (y - d * radius)); this.controlPointF2 = new PointF((float) (x + d * radius), (float) (y - d * radius)); this.startPointF2 = new PointF(x, y - radius); this.endPointF2 = new PointF(x, y + radius / 10); this.controlPointF3 = new PointF(x, (float) (y - d * radius)); this.controlPointF4 = new PointF((float) (x - d * radius), (float) (y - d * radius)); this.mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); this.mPaint.setColor(Color.WHITE); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //绘制贝塞尔曲线 Path path = new Path(); path.moveTo(startPointF.x, startPointF.y); path.cubicTo(controlPointF1.x, controlPointF1.y, controlPointF2.x, controlPointF2.y, endPointF.x, endPointF.y); canvas.drawPath(path, mPaint); path.moveTo(startPointF2.x, startPointF2.y); path.cubicTo(controlPointF3.x, controlPointF3.y, controlPointF4.x, controlPointF4.y, endPointF2.x, endPointF2.y); canvas.drawPath(path, mPaint); } }运行效果
2019年06月03日
151 阅读
0 评论
0 点赞