首页 文章 精选 留言 我的

精选列表

搜索[安装制作],共10027篇文章
优秀的个人博客,低调大师

源码资源、小程序、小游戏、网站、APP开发制作

你能做一名程序猿吗 我是一个从事互联网五年的程序员,在第三年的时候还做过一年的培训讲师(当时是培训机构的红利期),现在还是在做开发,大部分都是想通过培训转行的小白,但是又对IT行业充满迷惑,只知道好像工资很多,但是又不知道里面的细分职位,这也是行业互相之间存在着巨大的信息不对称。而一个小白如果想进入一个行业,如果不进行深入的调查,很容易被表面上你获取的信息所蒙蔽或者被相关利益方所误导,最后造成很多损失。 所以我觉得我的文章会帮助到很多小白~不懂就问! IT行业将在接下来很长时间里依然是促进社会发展的一个重要推动力之一。 因此必然将持续需要大量的人才,现在人才缺口依然很大,所以,如果你想转IT,目前依然机会合适。但是里面细分多少岗位呢? 简单来说一个产品的产生,是由老板说一个大方向,产品定下来主打方向,并且调研看是否可行,然后做出原型,UI根据原型出设计稿,前、后端程序员的技术分析产品文档,根据文档定接口,前端拿到UI的设计稿然后用代码实现,并且使用后端提供的数据接口,最后测试,运维上线,运营推广。我想大部分人,老板是当不了了,一般也都是做技术开发,这也是互联网里最多的职业,前后端开发。 其中前端就是写页面的,比如你能看到的网页/移动端网页/小程序/甚至于app,前端都可以做,前端是负责展示,而后端呢,就是对数据的操作。 我无数个亲戚说什么大数据年薪30W起步,我都觉得无语凝噎,大数据和ai需要对数学以及其他的很强的专业知识,并不是说仅仅会编程语言就行的,看到此贴的绝大部分人是不可能从事此行业的,就算你去培训这样的,也不过培训之后还是从事老本行,因为现在大数据和AI是普通人做不了的,就算我,一个从事互联网五年的老鸟,也做不了,而且我一本相关专业出身,干了五年多了,年薪才30W,而一个初出茅庐的新人,他想出来就是30W,没问题,那你有对应的知识和能力吗?大部分人是根本没有的!AI和大数据在互联网从业者里也是一小撮的。所以看了上面我说的,以及我的图后,就不要无脑的去培训java,好像互联网只有Java一样,java是国内互联网最多的职位,但是蛋糕再大,也架不住分的人多啊,现在国内java的现状就是企业有太多的选择了,人多嘛,不乏本专业出身的本科学历的,所以如果不是对后端数据特别感兴趣或者说本专业,我是不太赞同无脑培训java的,明显现在前端相对好点啊,毕竟5G对移动互联网又是一波节奏~如果是女孩子,推荐UI或者前端开发或者测试,这三者的岗位来说是前端>UI>测试,复杂度也是如此,鉴于女孩子对美的捕捉比较强以及其他方面综合考虑,还是最推荐女生学习UI。如果是有点基础/纯零基础的男生,最佳考虑前端,或者学习python做运维或者测试,只会Python是肯定找不到工作的,python是很好的辅助语言,但是只有他的话,无法Carry,但是很多人做前端薪资卡在15K,很多五年卡在20K,不过...好像大部分人来说15K或者20K就不错了。 个人企业商家需要做网站微信小程序 开发APP购买各种BBCSSC源代码 各种棋牌游戏源代码,手上有2018原草根吧整站资源,打包出售中。软文推广找云南雷厉科技有限公司。电话13658880498微信lonhjiale3 QQ708894317同步,注册账号,自已就能做模版搭建非常简单。 前端的发展就是不可以只做前端,你要涉及一些后端,并不是让你从事后端,而是你要在后期懂点后端,比方说现在随便拉一个五年以上程序员,哪个不是前后端都涉及?面就是去哪儿学,讲道理,培训班的手段套路,我门清儿~,而且现在培训机构市场杀成红海,都是争人头。这是一个很奇怪的行业,也是被互联网一直唾弃好像带有原罪的行业,可大多数人又不得不选择他作为前往互联网的跳板。 祝你早日成为一个程序猿

优秀的个人博客,低调大师

使用百度翻译api制作自己的字典

首先,这是一个java web项目.所以我们要创建一个web项目,使用工具eclipse. 创建完成项目后,在WebContent下创建css和js文件夹,用来存放静态资源文件,在WebContent下新建一个jsp页面,用来做翻译的页面. 前台写的很渣,就不献丑了,有一点要记住,就是一般情况下用link标签引入css文件,用script引入js文件.这是我的前台页面,抄的百度翻译(省略版),毕竟我不是要做一个百度 这个是jsp源码 index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>百度翻译</title> <script type="text/javascript" src="js/jquery-3.2.1.js"></script> <link rel="icon" type="image/png" href="//fanyi.bdstatic.com/static/translation/img/favicon/favicon-32x32_ca689c3.png" sizes="32x32" /> <link rel="icon" type="image/png" href="//fanyi.bdstatic.com/static/translation/img/favicon/favicon-16x16_e1883cf.png" sizes="16x16" /> <link rel="shortcut icon" type="image/x-icon" href="//fanyi.bdstatic.com/static/translation/img/favicon/favicon_d87cd2a.ico" /> <link rel="bookmark" type="image/x-icon" href="//fanyi.bdstatic.com/static/translation/img/favicon/favicon_d87cd2a.ico" /> <link rel="stylesheet" type="text/css" href="./css/main.css"> </head> <body> <img class="img_baidu" src="//fanyi.bdstatic.com/static/translation/img/header/logo_cbfea26.png" alt="" /> <br /> <div class="div_body"></div> <br /> <div class="div_from"> <select id="from"> <option value="auto"> 自动检测 </option> <option value="zh"> 中文 </option> <option value="en"> 英语 </option> <option value="yue"> 粤语 </option> <option value=" wyw"> 文言文 </option> <option value=" jp "> 日语 </option> <option value=" kor "> 韩语 </option> <option value=" fra "> 法语 </option> <option value=" spa "> 西班牙语 </option> <option value=" th "> 泰语 </option> <option value=" ara "> 阿拉伯语 </option> <option value=" ru "> 俄语 </option> <option value=" pt "> 葡萄牙语 </option> <option value=" de "> 德语 </option> <option value=" it "> 意大利语 </option> <option value=" el "> 希腊语 </option> <option value=" nl "> 荷兰语 </option> <option value=" pl "> 波兰语 </option> <option value=" bul "> 保加利亚语 </option> <option value=" est "> 爱沙尼亚语 </option> <option value=" dan "> 丹麦语 </option> <option value=" fin "> 芬兰语 </option> <option value=" cs "> 捷克语 </option> <option value=" rom "> 罗马尼亚语 </option> <option value=" slo "> 斯洛文尼亚语 </option> <option value=" swe "> 瑞典语 </option> <option value=" hu "> 匈牙利语 </option> <option value=" cht "> 繁体中文 </option> <option value=" vie "> 越南语 </option> </select> </div> <div class="div_to"> <select id="to"> <option value=" zh "> 中文 </option> <option value=" en "> 英语 </option> <option value=" yue "> 粤语 </option> <option value=" wyw "> 文言文 </option> <option value=" jp "> 日语 </option> <option value=" kor "> 韩语 </option> <option value=" fra "> 法语 </option> <option value=" spa "> 西班牙语 </option> <option value=" th "> 泰语 </option> <option value=" ara "> 阿拉伯语 </option> <option value=" ru "> 俄语 </option> <option value=" pt "> 葡萄牙语 </option> <option value=" de "> 德语 </option> <option value=" it "> 意大利语 </option> <option value=" el "> 希腊语 </option> <option value=" nl "> 荷兰语 </option> <option value=" pl "> 波兰语 </option> <option value=" bul "> 保加利亚语 </option> <option value=" est "> 爱沙尼亚语 </option> <option value=" dan "> 丹麦语 </option> <option value=" fin "> 芬兰语 </option> <option value=" cs "> 捷克语 </option> <option value=" rom "> 罗马尼亚语 </option> <option value=" slo "> 斯洛文尼亚语 </option> <option value=" swe "> 瑞典语 </option> <option value=" hu "> 匈牙利语 </option> <option value=" cht "> 繁体中文 </option> <option value=" vie "> 越南语 </option> </select> &nbsp; &nbsp; &nbsp; <input type="button" value="翻译" id="but_Trans"><br /> </div><br /> <textarea id="query" onclick="this.value='';focus()">此处为输入翻译的内容</textarea> <textarea id="result" readonly="readonly"></textarea> </div> </body> <script type="text/javascript"> $(function(){ $("#but_Trans").click(function(){ var query = $("#query").val(); var from = $("#from").val(); var to = $("#to").val(); $.ajax({ url:"/Trans/trans", type:"POST", data:{query:query,from:from,to:to}, success:function(result){ var json = $.parseJSON(result); var dst = ""; for (var i = 0; i < json.trans_result.length; i++) { dst += json.trans_result[i].dst; + "<br/>" } $("#result").html(dst); } }); }); }); </script> </html> 使用ajax进行前后台的调用,参数主要有from(自动识别区) , to(你想要翻译成的语言) , query(你要翻译的句子),这里有个小技巧,select中option有很多,所有我利用了excel的快捷性进行了复制,然后字体语言什么的都是百度翻译api文档中复制的,要想使用百度翻译功能也必须在api中注册才能使用,这个是路径(http://api.fanyi.baidu.com/api/trans/product/apidoc),具体效果如下:是不是很简单呢! ^_^ 接下来是具体的java代码了.首先呢,把百度提供的apiDEMO下载下,下载地址还是上面的路径,一开始我以为会是类似jar包的东西,BUT,居然是java源码,哈哈哈,没错,就是java文件….. 我呢,为了项目的模块和分层(其实就一个翻译),我的项目结构是这样的,将下载下的java文件添加到项目中,同时controller进行数据的传递,util进行翻译(相当于一个dao,不过不是接口,他的作用就是用来返回结果的,具体的翻译实现还是api下的文件实现的),然后config目录下,我是用来存放我的appid和密钥的. TransUtil.java import java.util.ResourceBundle; import songyu.li.api.TransApi; public class TransUtil { public final static String APP_ID ; public final static String SECRET_KEY; static { ResourceBundle rb = ResourceBundle.getBundle("api_config"); APP_ID = rb.getString("APP_ID"); SECRET_KEY = rb.getString("SECRET_KEY"); } public static String getResult(String query , String from , String to) { TransApi api = new TransApi(APP_ID, SECRET_KEY); return api.getTransResult(query, from, to); } } ps:通过ResourceBundle来读取config下的配置文件api_config.properties,然后静态加载到常量中.(config文件就不展示了,毕竟appid和密钥还是隐私的) TransController.java import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import xxxx.xxxx.utils.TransUtil; /** * 翻译Controller 前台ajax传过来的值通过@webservlet("/trans")进入Controller * * @ClassName : TransController * @Description : TODO(这里是对当前类的描述) * @author : * @date : 2018年3月23日下午3:11:04 * */ @WebServlet("/trans") public class TransController extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String query = req.getParameter("query"); String from = req.getParameter("from"); String to = req.getParameter("to"); String result = TransUtil.getResult(query, from.trim(), to.trim()); resp.getWriter().println(result); } } ps:controller继承了HttpServlet ,重写了dopost方法,通过req.getParameter(“name”)来获取参数的值(注意:在进行name获取的时候,由于我是从excel中复制过去的,所有在数据的前后都是有\t 的,接到的值都有空格,这个时候就使用到了String的trim()方法,它就是用来去掉数据前后的空格的),通过resp.getWriter().println(result)来返回到ajax中,默认返回一个字符串,需要再前台进行字符串解析成json然后取出数据.下面这个就是是默认返回的String格式的数据. 具体的源码:https://github.com/LeeSongYu/Trans (去config目录版)

优秀的个人博客,低调大师

基于MaxCompute构建企业用户画像(用户标签的制作)

背景: 在数据化营销时代,数据的价值越发显得更为珍贵。那如何让自己的数据发挥价值,也就是说如何让公司沉睡的数据能够驱动业务发展给公司带来商业价值?在营销里面我们都谈精准营销,谈用户画像,那用户画像到底如何构建,用户的标签如何开发?本示例给与最简单的demo,那个大家清楚认识基于MaxCompute如何构建企业用户标签。 数据说明: 基站位置信息:s_user_cell_log CREATETABLE s_user_cell_log ( user_id bigintCOMMENT'用户id', cell string COMMENT'基站id', phone_type string COMMENT'接入设备类型', latitude doubleCOMMENT'维度', longitude doubleCOMMENT'经度',

优秀的个人博客,低调大师

基于docker的centos:latest镜像制作nginx的镜像

Dockerfile和nginx.repo在同一目录下 先创建nginx.repo [root@localhostnginx]#catnginx.repo [nginx] name=nginxrepo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=0 enabled=1 [root@localhostnginx]#ls Dockerfilenginx.repo 写dockerfile [root@localhostnginx]#catDockerfile #ThisisMyfirstDockerfile #Version1.0 #Author:Liuzhengwei #Baseimages FROMcentos:base_newlatest MAINTAINERmail:1135960569@qq.com ADDnginx.repo/etc/yum.repos.d RUNyuminstallnginx-y RUNecho"daemonoff;">>/etc/nginx/nginx.conf RUNuseradd-s/sbin/nologin-Mwww EXPOSE80 CMD["nginx"] 创建镜像: [root@localhostnginx]#dockerbuild-tnginx-file:v1. ...... Removingintermediatecontainer57b75e5a35e7 Step8/8:CMDnginx --->Runningin062fddcc03ed --->f4a750280b72 Removingintermediatecontainer062fddcc03ed Successfullybuiltf4a750280b72 运行此镜像: [root@localhostnginx]#dockerrun-d-p80nginx-file:v1 6e43d596879c2b67fc74143957ef914ef842d78046812717919e576a629f694c 查看容器是否启动正常: [root@localhostnginx]#dockerps CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 6e43d596879cnginx-file:v1"nginx"7minutesagoUp7minutes0.0.0.0:32774->80/tcpsleepy_shannon 进入此容器: [root@localhostnginx]#dockerexec-it6e43d596879cbash [root@6e43d596879c/]#ps-ef|grepnginx root10015:58?00:00:00nginx:masterprocessnginx nginx71015:58?00:00:00nginx:workerprocess [root@6e43d596879c/]#ss-tnl 本文转自激情燃烧的岁月博客51CTO博客,原文链接http://blog.51cto.com/liuzhengwei521/1896073如需转载请自行联系原作者 weilovepan520

优秀的个人博客,低调大师

Android如何制作漂亮的自适布局的键盘

最近做了个自定义键盘,但面对不同分辨率的机型其中数字键盘不能根据界面大小自已铺满,但又不能每种机型都做一套吧,所以要做成自适应,那这里主讲思路。 这里最上面的titlebar高度固定,下面输入的金额高度也固定(当然也可以自适应),主要是中间的数字键盘,高度和宽度需要自适应。先来张效果图: 最常见的解决方案是用线性布局,自适应当然是按比例,但布局中无%的概念,那就要用到layout_weight了,该属性的作用是决定控件在其父布局中的显示权重(具体概念就不多说了)。 这里用一个LinearLayout 将数字键盘与下面的支付类型进行包装,然后用一个大LinearLayout包住所有的数字键盘如下图,它与下面支付类型比例是6:1,这样数字键盘就会按屏幕大小高度与宽度进行变化,每一行数字键盘用一个LinearLayout,里面包3个数字显示Button按钮。 设置每行的LinearLayout的layout_height=0dp,layout_weight=1,具体设置如下: <style name="layout_input_amount_style"> <item name="android:layout_width">match_parent</item> <item name="android:layout_height">0dp</item> <item name="android:layout_weight">1</item> <item name="android:layout_marginBottom">1dp</item> <item name="android:gravity">center</item> <item name="android:orientation">horizontal</item> </style> 这样就保证了上下自适应布局。然后行里面的Button也是平均分配,不过这里是横向布局:layout_width=0dp,layout_weight=1,具体设置如下: <style name="btn_input_amount_style"> <item name="android:layout_width">0dp</item> <item name="android:layout_height">match_parent</item> <item name="android:layout_weight">1</item> <item name="android:textSize">40sp</item> <item name="android:textColor">#333333</item> <item name="android:background">@color/white</item> </style> 这样就达到了上面的数字键盘的上下左右自适应了。现在的问题是其中的灰色边框怎么出来呢?TextView中没有设置border的属性,网上找的方法又很麻烦。 这里需要用到一个技巧,利用灰色背景,让两个按键间的margin=1,上下也是margin=1,但是最右边的3、6、9和最后一行不用加。 <Button android:id="@+id/btn_1" style="@style/btn_input_amount_style" android:layout_marginRight="1dp" android:text="1" /> 为什么要设置layout_width=0dp?结合layout_weight,可以使控件成正比例显示,轻松解决了当前Android开发最为头疼的碎片化问题之一。如果设置成wrap_content,内容过长会导致上下无法对齐的情况。 下面为整个布局内容: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.view.InputAmountActivity"> <RelativeLayout android:id="@+id/bar_input" android:layout_width="match_parent" android:layout_height="@dimen/title_bar_height" android:background="@color/logo_background" android:orientation="horizontal"> <TextView android:id="@+id/bar_back" android:layout_width="wrap_content" android:layout_height="match_parent" android:background="@color/transparent" android:drawableLeft="@drawable/btn_back_detail" android:paddingLeft="17dip" android:paddingRight="17dip" /> <TextView android:id="@+id/bar_title" style="@style/title_text_style" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_marginLeft="50dp" android:layout_marginRight="50dp" android:singleLine="true" android:text="输入金额" /> </RelativeLayout> <LinearLayout android:id="@+id/txt_amount" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/bar_input" android:background="@color/logo_background"> <TextView android:id="@+id/txt_pay_amount" android:layout_width="match_parent" android:layout_height="115dp" android:background="@color/transparent" android:gravity="right|center" android:paddingLeft="17dip" android:paddingRight="20dp" android:text="¥998" android:textColor="@color/white" android:textSize="40sp" android:textStyle="bold" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/txt_amount" android:orientation="vertical"> <LinearLayout android:id="@+id/table_num" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="6" android:background="#c8cbcc" android:orientation="vertical"> <LinearLayout style="@style/layout_input_amount_style"> <Button android:id="@+id/btn_1" style="@style/btn_input_amount_style" android:layout_marginRight="1dp" android:text="1" /> <Button android:id="@+id/btn_2" style="@style/btn_input_amount_style" android:layout_marginRight="1dp" android:text="2" /> <Button android:id="@+id/btn_3" style="@style/btn_input_amount_style" android:text="3" /> </LinearLayout> <LinearLayout style="@style/layout_input_amount_style"> <Button android:id="@+id/btn_4" style="@style/btn_input_amount_style" android:layout_marginRight="1dp" android:text="4" /> <Button android:id="@+id/btn_5" style="@style/btn_input_amount_style" android:layout_marginRight="1dp" android:text="5" /> <Button android:id="@+id/btn_6" style="@style/btn_input_amount_style" android:text="6" /> </LinearLayout> <LinearLayout style="@style/layout_input_amount_style"> <Button android:id="@+id/btn_7" style="@style/btn_input_amount_style" android:layout_marginRight="1dp" android:text="7" /> <Button android:id="@+id/btn_8" style="@style/btn_input_amount_style" android:layout_marginRight="1dp" android:text="8" /> <Button android:id="@+id/btn_9" style="@style/btn_input_amount_style" android:text="9" /> </LinearLayout> <LinearLayout style="@style/layout_input_amount_style"> <Button android:id="@+id/btn_t" style="@style/btn_input_amount_style" android:layout_marginRight="1dp" android:text="." /> <Button android:id="@+id/btn_0" style="@style/btn_input_amount_style" android:layout_marginRight="1dp" android:text="0" /> <ImageButton android:id="@+id/btn_d" style="@style/btn_input_amount_style" android:src="@drawable/ico_del" /> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="68dp" android:layout_weight="1" android:orientation="horizontal"> <LinearLayout android:id="@+id/layout_zhifubao" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@color/logo_background" android:gravity="center" android:orientation="vertical"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="9dp" android:src="@drawable/ico_zhifubao" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="9dp" android:text="支付宝" android:textColor="@color/white" android:textSize="12sp" /> </LinearLayout> <LinearLayout android:id="@+id/layout_wechat" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="#3cb034" android:gravity="center" android:orientation="vertical"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="9dp" android:src="@drawable/ico_wechat" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="9dp" android:text="微信" android:textColor="@color/white" android:textSize="12sp" /> </LinearLayout> <LinearLayout android:id="@+id/layout_pay" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="#ff7700" android:gravity="center" android:orientation="vertical"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="9dp" android:src="@drawable/ico_pay" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="9dp" android:text="储值" android:textColor="@color/white" android:textSize="12sp" /> </LinearLayout> </LinearLayout> </LinearLayout> </RelativeLayout> 是不是很酷? 图标什么的自己上网找吧,这里就不贴出来了。 微信支付的源码和支付碰到的部分问题解决方法已上传至微信公众号【一个码农的日常】,其它知识可回复:数据库,NET ,JS 即可自行下载,以后会定期更新内容。 本文转自欢醉博客园博客,原文链接http://www.cnblogs.com/zhangs1986/p/5054575.html如需转载请自行联系原作者 欢醉

优秀的个人博客,低调大师

android多媒体音乐(MediaPlayer)播放器制作代码

本文实例为大家分享了android多媒体音乐播放器的具体实现代码,供大家参考,具体内容如下。 首先,在AndroidManifest.xml中配置权限 <!--读取手机中的音乐--> <uses-permissionandroid:name="android.permission.READ_EXTERNAL_STORAGE"/> 注释:Android多媒体音乐的几种来源 1. 在andriod的应用中 2 MediaPlayer.create(this,R.raw.roar); //mnt/sdcard/手机内存卡 2. 放在自己的sd卡中(内存卡) mediaPlayer.setDataSource(this,Uri.parse("file://mnt/sdcard/1/123.mp3")); 3.在网络上(要知道哪个路径) mediaPlayer.setDataSource(this,Uri.parse("http://192.168.43.202:8080/sister.mp3")); 接下来,在Java代码中写 在onCreate方法中写全局变量: privateMediaPlayermediaPlayer; privateSeekBarseekBar; privateSurfaceViewsv_main_suffce; publicvoidonplay(Viewview)throwsIOException{ imageButton=(ImageButton)view; if(mediaPlayer==null){ //播放应用的音频文件 //mediaPlayer=MediaPlayer.create(this,R.raw.roar); //播放内存卡中的音频文件 mediaPlayer=newMediaPlayer(); //音频流的类型 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); //设置音频的来源 //mediaPlayer.setDataSource(this,Uri.parse("file://mnt/sdcard/1/roar.mp3")); //mediaPlayer.prepare();//准备一下 //播放网络音乐 mediaPlayer.setDataSource(this,Uri.parse("http://192.168.43.202:8080/crickets.mp3")); //一步准备 mediaPlayer.prepareAsync(); //设置准备完的监听 mediaPlayer.setOnPreparedListener(newMediaPlayer.OnPreparedListener(){ @Override publicvoidonPrepared(MediaPlayermediaPlayer){ //开始播放 mediaPlayer.start(); //点击播放改变图标 imageButton.setImageResource(android.R.drawable.ic_media_pause); //获取音乐的播放最大时间 intdurtion=mediaPlayer.getDuration(); //设置进度条的最大值为音乐的播放最大时间 seekBar.setMax(durtion); newMythred().start(); } }); //给进度条设置一个事件 seekBar.setOnSeekBarChangeListener(newSeekBar.OnSeekBarChangeListener(){ @Override publicvoidonProgressChanged(SeekBarseekBar,inti,booleanb){ } @Override publicvoidonStartTrackingTouch(SeekBarseekBar){ } @Override publicvoidonStopTrackingTouch(SeekBarseekBar){ //获取拖动的进度 intprogress=seekBar.getProgress(); //到那个位置播放 mediaPlayer.seekTo(progress); } }); } elseif(mediaPlayer.isPlaying()){ mediaPlayer.pause(); imageButton.setImageResource(android.R.drawable.ic_media_play); } else{ mediaPlayer.start(); imageButton.setImageResource(android.R.drawable.ic_media_pause); } } 写了一个子线程 extends Thread(seekbar进度条): classMythrodextendsThread{ @Override publicvoidrun(){ super.run(); while(seekBar.getProgress()<=seekBar.getMax()){ //获取音乐的当前播放位置 intcurrentPosition=mediaPlayer.getCurrentPosition(); seekBar.setProgress(currentPosition); } } } 另建一个类SoundActivity,通过soundPool例化音频池可以实现多种声音一起播放 //实例化音频池 soundPool=newSoundPool(4,AudioManager.STREAM_MUSIC,0); soundPool.setOnLoadCompleteListener(newSoundPool.OnLoadCompleteListener(){ @Override publicvoidonLoadComplete(SoundPoolsoundPool,inti,intstatus){ //播放 soundPool.play(i,1,1,1,-1,1); } }); //写声音按钮的方法 publicvoidplayKFC(Viewview){ //音频池的路径 soundPool.load(this,R.raw.rooster,1); } publicvoidplayTwo(Viewview){ soundPool.load(this,R.raw.chimp,1); } publicvoidplayThree(Viewview){ soundPool.load(this,R.raw.crickets,1); } publicvoidplayFour(Viewview){ soundPool.load(this,R.raw.roar,1); } publicvoidplayDog(Viewview){ soundPool.load(this,R.raw.dogbark,1); } //销毁音频池soundPool @Override protectedvoidonDestroy(){ super.onDestroy(); if(soundPool!=null){ //释放内存 soundPool.release(); soundPool=null; } } 以上就是本文的全部内容,希望对大家的学习有所帮助。 作者:Strange_yy 来源:51CTO

优秀的个人博客,低调大师

windows安装jenkins(docker安装)

install DockerSystem Requirements: Windows 10 64bit: Pro, Enterprise or Education (Build 15063 or later).Virtualization is enabled in BIOS. Typically, virtualization is enabled by default. This is different from having Hyper-V enabled. For more detail see Virtualization must be enabled in Troubleshooting.CPU SLAT-capable feature.At least 4GB of RAM. download DockerCE for windows install jenkins用cmd命令窗口执行下述命令 docker run ^ --rm ^ -u root ^ -p 8080:8080 ^ -v jenkins-data:/var/jenkins_home ^ -v /var/run/docker.sock:/var/run/docker.sock ^ -v "%HOMEPATH%:/home ^ jenkinsci/blueocean #"%HOMEPATH%"为用户目录 执行完毕后访问 http://127.0.0.1:8080 提示需要通过日志访问密码 使用Maven构建流水线 -u root ^ --rm ^ -d ^ -p 8080:8080 ^ -p 50000:50000 ^ -v jenkins-data:/var/jenkins_home ^ -v /var/run/docker.sock:/var/run/docker.sock ^ jenkinsci/blueocean

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册