首页 文章 精选 留言 我的

精选列表

搜索[网站开发],共10000篇文章
优秀的个人博客,低调大师

android的互联网开发

http1.xml <TableRow> <TextView android:text="用户密码:" android:id="@+id/TextView" android:layout_width="wrap_content" android:layout_height="wrap_content" ></TextView> <EditText android:text="" android:id="@+id/pwdEditText" android:layout_width="fill_parent" android:layout_height="wrap_content" android:password="true"></EditText> </TableRow> <TableRowandroid:gravity="right"> <Button android:text="取消" android:id="@+id/cancelButton" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> <Button android:text="登陆" android:id="@+id/loginButton" android:layout_width="wrap_content" android:layout_height="wrap_content"></Button> </TableRow> </TableLayout> /LinearLayout> 四、Web Service编程 TestWebServiceActivity.java packagecom.amaker.ch13.webservice; importjava.io.IOException; importorg.ksoap2.SoapEnvelope; importorg.ksoap2.serialization.MarshalBase64; importorg.ksoap2.serialization.PropertyInfo; importorg.ksoap2.serialization.SoapObject; importorg.ksoap2.serialization.SoapSerializationEnvelope; importorg.ksoap2.transport.AndroidHttpTransport; importorg.xmlpull.v1.XmlPullParserException; importandroid.app.Activity; importandroid.os.Bundle; publicclassTestWebServiceActivityextendsActivity{ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); StringserviceNamespace="http://tempuri.org/"; StringserviceURL="http://www.ayandy.com/Service.asmx"; StringmethodName="getWeatherbyCityName"; SoapObjectrequest=newSoapObject(serviceNamespace,methodName); PropertyInfoinfo=newPropertyInfo(); info.setName("theCityName"); info.setValue("北京"); PropertyInfoinfo2=newPropertyInfo(); info2.setName("theDayFlag"); info2.setValue("1"); request.addProperty(info); request.addProperty(info2); SoapSerializationEnvelopeenvelope=newSoapSerializationEnvelope(SoapEnvelope.VER11); envelope.bodyOut=request; (newMarshalBase64()).register(envelope); AndroidHttpTransportht=newAndroidHttpTransport(serviceURL); ht.debug=true; try{ ht.call("http://tempuri.org/getWeatherbyCityName",envelope); if(envelope.getResponse()!=null){ System.out.println(envelope.getResult()); } }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(XmlPullParserExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } } WeatherActivity.java packagecom.amaker.ch13.webservice; importjava.util.List; importandroid.app.Activity; importandroid.os.Bundle; importandroid.view.View; importandroid.widget.AdapterView; importandroid.widget.ArrayAdapter; importandroid.widget.Spinner; importandroid.widget.TextView; importandroid.widget.AdapterView.OnItemSelectedListener; importcom.amaker.ch13.R; /** * *显示天气预报 */ publicclassWeatherActivityextendsActivity{ //声明视图组件 privateTextViewdisplayTextView; privateSpinnerspinner; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.weather); //实例化视图组件 displayTextView=(TextView)findViewById(R.id.displayTextView03); spinner=(Spinner)findViewById(R.id.citySpinner01); List<String>citys=WebServiceUtil.getCityList(); ArrayAdaptera=newArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item,citys); spinner.setAdapter(a); spinner.setOnItemSelectedListener(newOnItemSelectedListener(){ @Override publicvoidonItemSelected(AdapterView<?>arg0,Viewarg1, intarg2,longarg3){ Stringmsg=WebServiceUtil.getWeatherMsgByCity(spinner.getSelectedItem().toString()); displayTextView.setText(msg); } @Override publicvoidonNothingSelected(AdapterView<?>arg0){ } }); } } WebServiceUtil.java packagecom.amaker.ch13.webservice; importjava.io.IOException; importjava.io.InputStream; importjava.util.ArrayList; importjava.util.List; importjavax.xml.parsers.DocumentBuilder; importjavax.xml.parsers.DocumentBuilderFactory; importorg.apache.http.HttpResponse; importorg.apache.http.NameValuePair; importorg.apache.http.client.entity.UrlEncodedFormEntity; importorg.apache.http.client.methods.HttpPost; importorg.apache.http.impl.client.DefaultHttpClient; importorg.apache.http.message.BasicNameValuePair; importorg.apache.http.protocol.HTTP; importorg.apache.http.util.EntityUtils; importorg.ksoap2.SoapEnvelope; importorg.ksoap2.serialization.MarshalBase64; importorg.ksoap2.serialization.SoapObject; importorg.ksoap2.serialization.SoapSerializationEnvelope; importorg.ksoap2.transport.AndroidHttpTransport; importorg.w3c.dom.Document; importorg.w3c.dom.Element; importorg.w3c.dom.Node; importorg.w3c.dom.NodeList; importorg.xmlpull.v1.XmlPullParserException; /** * *天气预报工具类 */ publicclassWebServiceUtil{ /* *通过传递城市名称获得天气信息 */ publicstaticStringgetWeatherMsgByCity(StringcityName){ Stringurl="http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx/getWeather"; HttpPostrequest=newHttpPost(url); List<NameValuePair>params=newArrayList<NameValuePair>(); params.add(newBasicNameValuePair("theCityCode",cityName)); params.add(newBasicNameValuePair("theUserID","")); Stringresult=null; try{ UrlEncodedFormEntityentity=newUrlEncodedFormEntity(params, HTTP.UTF_8); request.setEntity(entity); HttpResponseresponse=newDefaultHttpClient().execute(request); if(response.getStatusLine().getStatusCode()==200){ result=EntityUtils.toString(response.getEntity()); returnparse2(result); } }catch(Exceptione){ e.printStackTrace(); } returnnull; } /* *使用ksoap,获得城市列表 */ publicstaticList<String>getCityList(){ //命名空间 StringserviceNamespace="http://WebXml.com.cn/"; //请求URL StringserviceURL="http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx"; //调用的方法 StringmethodName="getRegionProvince"; //实例化SoapObject对象 SoapObjectrequest=newSoapObject(serviceNamespace,methodName); //获得序列化的Envelope SoapSerializationEnvelopeenvelope=newSoapSerializationEnvelope( SoapEnvelope.VER11); envelope.bodyOut=request; (newMarshalBase64()).register(envelope); //Android传输对象 AndroidHttpTransportht=newAndroidHttpTransport(serviceURL); ht.debug=true; try{ //调用 ht.call("http://WebXml.com.cn/getRegionProvince",envelope); if(envelope.getResponse()!=null){ returnparse(envelope.bodyIn.toString()); } }catch(IOExceptione){ e.printStackTrace(); }catch(XmlPullParserExceptione){ e.printStackTrace(); } returnnull; } /* *对天气信息XML文件进行解析 */ privatestaticStringparse2(Stringstr){ Stringtemp; String[]temps; Listlist=newArrayList(); StringBuildersb=newStringBuilder(""); if(str!=null&&str.length()>0){ temp=str.substring(str.indexOf("<string>")); temptemps=temp.split("</string>"); for(inti=0;i<temps.length;i++){ sb.append(temps[i].substring(12)); sb.append("\n"); } } returnsb.toString(); } /* *对得到的城市XML信息进行解析 */ privatestaticList<String>parse(Stringstr){ Stringtemp; List<String>list=newArrayList<String>(); if(str!=null&&str.length()>0){ intstart=str.indexOf("string"); intend=str.lastIndexOf(";"); temp=str.substring(start,end-3); String[]test=temp.split(";"); for(inti=0;i<test.length;i++){ if(i==0){ temp=test[i].substring(7); }else{ temp=test[i].substring(8); } intindex=temp.indexOf(","); list.add(temp.substring(0,index)); } } returnlist; } } weather.xml <?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:text="天气预报" android:id="@+id/titleTextView01" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:text="请选择城市:" android:id="@+id/cityTextView02" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView> <Spinner android:id="@+id/citySpinner01" android:layout_width="fill_parent" android:layout_height="wrap_content"></Spinner> </LinearLayout> <ScrollView android:id="@+id/ScrollView01" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:text="@+id/displayTextView03" android:id="@+id/displayTextView03" android:layout_width="fill_parent" android:layout_height="fill_parent"></TextView> </ScrollView> </LinearLayout> 五、WebView编程 TestWebViewActivity.java packagecom.amaker.ch13.webview; importandroid.app.Activity; importandroid.os.Bundle; importandroid.webkit.WebView; importcom.amaker.ch13.R; /** *通过WebView浏览网络 */ publicclassTestWebViewActivityextendsActivity{ privateWebViewwebView; @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.test_webview); webView=(WebView)findViewById(R.id.mywebview); /*Stringurl="http://www.google.com"; webView.loadUrl(url);*/ Stringhtml=""; html+="<html>"; html+="<body>"; html+="<ahref=http://www.google.com>GoogleHome</a>"; html+="</body>"; html+="</html>"; webView.loadData(html,"text/html","utf-8"); } } test_webview.xml <?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <WebView android:id="@+id/mywebview" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout> 本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1079312

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

Android开发之OkHttp3.4.x

HTTP是现代应用程序访问网络的一种方式。网络中很多请求就是使用的http方式,来访问网络的。 Android从4.4开始,HttpUrlConnection开始使用okhttp作为底层实现。实现原理如下图: 这篇博客简单说一下okhttp的使用。文字部分没有讲清楚的,可以查看代码里面的注释。首先看一下okHttp怎么工作的。 首先我们看看一个okhttp完整的网络访问,都涉及到了那几个类(这里先说核心类)。 1.OkHttpClient: Call类的工厂,Call是用来发送网络请求和接收服务器响应的类。这个类实例可以设置拦截器,缓存大小,缓存目录,连接池等信息。 2.Request:是用来创建http请求,这个请求里面可以设置请求头信息,网络访问地址,请求方式(GET,POST,DELETE,PUT)等。 3.Call:一个接口,一个准备执行的请求。 具体代码: 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 /** *首先构建OkHttpClient,<br/> *1.方法:直接使用new关键字创建 *2.方法:使用构造着模式,OkHttpClient.Builder.build方法构造。 *这个类是用来配置和创建HTTP连接。在大多数的程序中,这个类可以封装成一个单利模式 *来进行程序网络访问的统一管理。 *设置共享的响应缓存、线程池、连接复用 *(要设置这些东西,请使用官方提供的方法,OkHttpClient.Builder来设置缓存目录、缓存大小, *配置连接池, *配置拦截器, *) *然后构建Request请求对象<br/> *request对象只能使用Request.Builder.build来创建对象。 *最后Call,使用httpClient.newCall(request)来生成一个执行对象。 *用call对象,调用execute方法,执行网络请求 **/ Filefile= new File(Environment.getDataDirectory().getAbsolutePath()+File.pathSeparator+ "http_cache" ); final Cachecache= new Cache(file, 20000 ); //最大的闲置连接数量, ConnectionPoolpool= new ConnectionPool( 10 , 5 ,TimeUnit.SECONDS); //call的工厂类,Call是用来发送请求和接收响应的类 OkHttpClienthttpClient= new OkHttpClient.Builder().addInterceptor( new Interceptor(){ @Override public Responseintercept(Chainchain) throws IOException{ //请求时的参数 Responseresponse=chain.proceed(chain.request()); okhttp3.MediaTypemediaType=response.body().contentType(); //响应体 Stringcontent=response.body().string(); return response.newBuilder() .body(okhttp3.ResponseBody.create(mediaType,content)) .build(); } //这只连接池,缓存 }).connectionPool(pool).cache(cache).build(); //这里面来设置网络访问的头信息,以及访问的网络地址,这里默认使用get方式请求 Requestrequest= new Request.Builder().url( "https://www.baidu.com" ).build(); Callcall=httpClient.newCall(request); call.enqueue( new Callback(){ @Override public void onFailure(Callcall,IOExceptione){ Log.d( "--MainActivity--" , "onFailure:---网络访问失败" ); } @Override public void onResponse(Callcall,Responseresponse) throws IOException{ //这个方法在网络访问成功之后回执行。response响应体,实例里封装了服务器返回的数据。 //最常用的就是body(),服务器返回的数据(ResponseBody)。这个ResponseBody里面是服务器具体返回的数据 //如果是返回的字符串则用string()方法。如果是流,则byteStream(),字节数组bytes(). Log.d( "--MainActivity--" , "onResponse:" +response.body().string()); } }); 这样一个完整的网络访问就完成了。 使用到得权限: <uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 注:okhttp源码:https://github.com/square/okhttp 本文转自 墨宇hz 51CTO博客,原文链接:http://blog.51cto.com/zzhhz/1879372

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

hadoop mapreduce开发实践文件合并(join)

有两份不同的文件,他们有相同的键,把他们合并成一个文件; 1、文件内容 合并前的文件a.txt和b.txt $ head a.txt b.txt ==> a.txt <== aaa1 hdfs aaa2 hdfs aaa3 hdfs aaa4 hdfs aaa5 hdfs aaa6 hdfs aaa7 hdfs aaa8 hdfs aaa9 hdfs aaa10 hdfs ==> b.txt <== aaa1 mapreduce aaa2 mapreduce aaa3 mapreduce aaa4 mapreduce aaa5 mapreduce aaa6 mapreduce aaa7 mapreduce aaa8 mapreduce aaa9 mapreduce aaa10 mapreduce 2、思路 1)、首先分别对a.txt和b.txt做一个map标签处理(用于区分a.txt和b.txt上的数据); 2)、mapjoin用于输出做过标签处理的a.txt和b.txt; 3)、用一个reducejoin的程序做类似wordcount处理,相同的key放在一起,把a.txt和b.txt上的value放在key后面输出; 3、实现 3.1、创建目录和上传数据 $ hadoop fs -mkdir /input/join $ hadoop fs -mkdir /output/join/ $ hadoop fs -put a.txt b.txt /input/join 3.2、 mapperA程序 #!/usr/bin/env python # -*- conding:utf-8 -*- import sys def mapper(): for line in sys.stdin: wordline = line.strip().split() wordkey = wordline[0] wordvalue = wordline[1] #print wordline print "%s\ta\t%s" % (wordkey, wordvalue) if __name__ == "__main__": mapper() 3.3、mapperB程序 #!/usr/bin/env python # -*- conding:utf-8 -*- import sys def mapper(): for line in sys.stdin: wordline = line.strip().split() wordkey = wordline[0] wordvalue = wordline[1] print "%s\tb\t%s" % (wordkey, wordvalue) if __name__ == "__main__": mapper() 3.4、mapperjoin程序 #!/usr/bin/env python # -*- conding:utf-8 -*- import sys def mapper(): for line in sys.stdin: print line.strip() if __name__ == "__main__": mapper() 3.5、reducerjoin程序 #!/usr/bin/env python # -*- conding:utf-8 -*- import sys def reducer(): valueA = '' for line in sys.stdin: wordkey, flag, wordvalue = line.strip().split('\t') if flag == 'a': valueA = wordvalue elif flag == 'b': valueB = wordvalue print "%s\t%s\t%s" % (wordkey,valueA,valueB) valueA = '' if __name__ == "__main__": reducer() 3.6、run_streaming程序 #!/bin/bash HADOOP_CMD="/home/hadoop/app/hadoop/hadoop-2.6.0-cdh5.13.0/bin/hadoop" STREAM_JAR_PATH="/home/hadoop/app/hadoop/hadoop-2.6.0-cdh5.13.0/share/hadoop/tools/lib/hadoop-streaming-2.6.0-cdh5.13.0.jar" INPUT_FILE_PATH_A="/input/join/a.txt" INPUT_FILE_PATH_B="/input/join/b.txt" OUTPUT_FILE_PATH_A="/output/join/a" OUTPUT_FILE_PATH_B="/output/join/b" OUTPUT_FILE_JOIN_PATH="/output/join/abjoin" $HADOOP_CMD fs -rmr -skipTrash $OUTPUT_FILE_PATH_A $HADOOP_CMD fs -rmr -skipTrash $OUTPUT_FILE_PATH_B $HADOOP_CMD fs -rmr -skipTrash $OUTPUT_FILE_JOIN_PATH # step1: map a $HADOOP_CMD jar $STREAM_JAR_PATH \ -input $INPUT_FILE_PATH_A \ -output $OUTPUT_FILE_PATH_A \ -jobconf "mapred.job.name=joinfinemapA" \ -mapper "python mapperA.py" \ -file "./mapperA.py" # step2: map b $HADOOP_CMD jar $STREAM_JAR_PATH \ -input $INPUT_FILE_PATH_B \ -output $OUTPUT_FILE_PATH_B \ -jobconf "mapred.job.name=joinfinemapB" \ -mapper "python mapperB.py" \ -file "./mapperB.py" # step3: join $HADOOP_CMD jar $STREAM_JAR_PATH \ -input $OUTPUT_FILE_PATH_A,$OUTPUT_FILE_PATH_B \ -output $OUTPUT_FILE_JOIN_PATH \ -mapper "python mapperjoin.py" \ -reducer "python reducerjoin.py" \ -jobconf "mapred.job.name=joinfinemapAB" \ -jobconf "stream.num.map.output.key.fields=2" \ -jobconf "num.key.fields.for.partition=1" \ -file "./reducerjoin.py" \ -file "./mapperjoin.py" 3.7、执行程序 $ ./run_streamingab.sh ...中间省略... 18/02/05 10:43:13 INFO streaming.StreamJob: Output directory: /output/join/a ...中间省略... 18/02/05 10:43:42 INFO streaming.StreamJob: Output directory: /output/join/b ...中间省略... 18/02/05 10:44:12 INFO streaming.StreamJob: Output directory: /output/join/abjoin 3.8、查看结果 $ hadoop fs -ls /output/join/abjoin Found 2 items -rw-r--r-- 1 hadoop supergroup 0 2018-02-05 10:44 /output/join/abjoin/_SUCCESS -rw-r--r-- 1 hadoop supergroup 6276 2018-02-05 10:44 /output/join/abjoin/part-00000 $ hadoop fs -text /output/join/abjoin/part-00000|head aaa1 hdfs mapreduce aaa10 hdfs mapreduce aaa100 hdfs mapreduce aaa11 hdfs mapreduce aaa12 hdfs mapreduce aaa13 hdfs mapreduce aaa14 hdfs mapreduce aaa15 hdfs mapreduce aaa16 hdfs mapreduce aaa17 hdfs mapreduce 4、hadoop streaming 语法参考 http://blog.51cto.com/balich/2065419 本文转自 巴利奇 51CTO博客,原文链接:http://blog.51cto.com/balich/2068884

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

【移动开发】Android Animation 动画效果总结

1.Android的animation由四种类型组成: XML中 alpha 渐变透明度动画效果 scale 渐变尺寸伸缩动画效果 translate 画面转换位置移动动画效果 rotate 画面转移旋转动画效果 JavaCode中 AlphaAnimation 渐变透明度动画效果 ScaleAnimation 渐变尺寸伸缩动画效果 TranslateAnimation 画面转换位置移动动画效果 RotateAnimation 画面转移旋转动画效果 2.Animation主要有两种动画模式: 一种是tweened animation(渐变动画) XML中 JavaCode alpha AlphaAnimation scale ScaleAnimation 一种是frame by frame(画面转换动画) XML中 JavaCode translate TranslateAnimation rotate RotateAnimation 3.如何在XML文件中定义动画 ① 打开Eclipse,新建Android工程 ② 在res目录中新建anim文件夹 ③ 在anim目录中新建一个myanim.xml(注意文件名小写) ④ 加入XML的动画代码 1 2 3 4 5 6 7 <?xml version= "1.0" encoding= "utf-8" ?> < set xmlns:android= "http://schemas.android.com/apk/res/android" > <alpha/> <scale/> <translate/> <rotate/> </ set > 4.Android动画解析--XML <alpha> 透明度 1 2 3 4 5 6 7 8 <?xml version= "1.0" encoding= "utf-8" ?> < set xmlns:android= "http://schemas.android.com/apk/res/android" > <alpha android:fromAlpha= "0.1" android:toAlpha= "1.0" android:duration= "3000" /> </ set > 注释: fromAlpha(浮点型值) 属性为动画起始时透明度, 0.0表示完全透明 toAlpha(浮点型值) 属性为动画结束时透明度, 1.0表示完全不透明. fromAlpha 和 toAlpha 的取值在0.0-1.0之间的float数据类型的数字 duration(长整型值) 属性为动画持续时间,时间以毫秒为单位 <scale> 缩放 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <?xml version= "1.0" encoding= "utf-8" ?> < set xmlns:android= "http://schemas.android.com/apk/res/android" > <scale android:interpolator= "@android:anim/accelerate_decelerate_interpolator" android:fromXScale= "0.0" android:toXScale= "1.4" android:fromYScale= "0.0" android:toYScale= "1.4" android:pivotX= "50%" android:pivotY= "50%" android:fillAfter= "false" android:duration= "700" /> </ set > 注释: interpolator 指定一个动画的插入器在我试验过程中,使用android.res.anim中的资源时候发现有三种动画插入器: accelerate_decelerate_interpolator 加速-减速 动画插入器 accelerate_interpolator 加速-动画插入器 decelerate_interpolator 减速- 动画插入器 其他的属于特定的动画效果 A.浮点型值: fromXScale 属性为动画起始时 X坐标上的伸缩尺寸 toXScale 属性为动画结束时 X坐标上的伸缩尺寸 fromYScale 属性为动画起始时Y坐标上的伸缩尺寸 toYScale 属性为动画结束时Y坐标上的伸缩尺寸 说明: 0.0表示收缩到没有,1.0表示正常无伸缩 值小于1.0表示收缩,值大于1.0表示放大 pivotX 属性为动画相对于物件的X坐标的开始位置 pivotY 属性为动画相对于物件的Y坐标的开始位置 说明: 以上两个属性值 从0%-100%中取值 50%为物件的X或Y方向坐标上的中点位置 B.长整型值: duration 属性为动画持续时间 说明: 时间以毫秒为单位 C.布尔型值: fillAfter 属性 当设置为true ,该动画转化在动画结束后被应用 <translate> 移动 1 2 3 4 5 6 7 8 9 10 <?xml version= "1.0" encoding= "utf-8" ?> < set xmlns:android= "http://schemas.android.com/apk/res/android" > <translate android:fromXDelta= "30" android:toXDelta= "-80" android:fromYDelta= "30" android:toYDelta= "300" android:duration= "2000" /> </ set > 注释: 整型值: fromXDelta 属性为动画起始时 X坐标上的位置 toXDelta 属性为动画结束时 X坐标上的位置 fromYDelta 属性为动画起始时 Y坐标上的位置 toYDelta 属性为动画结束时 Y坐标上的位置 注意: 没有指定fromXType toXType fromYType toYType 时候,默认是以自己为相对参照物 长整型值: duration 属性为动画持续时间,时间以毫秒为单位 <rotate> 旋转 1 2 3 4 5 6 7 8 9 10 <?xml version= "1.0" encoding= "utf-8" ?> < set xmlns:android= "http://schemas.android.com/apk/res/android" > <rotate android:interpolator= "@android:anim/accelerate_decelerate_interpolator" android:fromDegrees= "0" android:toDegrees= "+350" android:pivotX= "50%" android:pivotY= "50%" android:duration= "3000" /> </ set > 注释: 属性:interpolator 指定一个动画的插入器有三种动画插入器: accelerate_decelerate_interpolator 加速-减速 动画插入器 accelerate_interpolator 加速-动画插入器 decelerate_interpolator 减速- 动画插入器 其他的属于特定的动画效果 A.浮点数型值: fromDegrees 属性为动画起始时物件的角度 toDegrees 属性为动画结束时物件旋转的角度 可以大于360度 说明: 当角度为负数——表示逆时针旋转 当角度为正数——表示顺时针旋转 (负数from——to正数:顺时针旋转) (负数from——to负数:逆时针旋转) (正数from——to正数:顺时针旋转) (正数from——to负数:逆时针旋转) pivotX 属性为动画相对于物件的X坐标的开始位置 pivotY 属性为动画相对于物件的Y坐标的开始位置 说明: 以上两个属性值 从0%-100%中取值,50%为物件的X或Y方向坐标上的中点位置 B.长整型值: duration 属性为动画持续时间,时间以毫秒为单位 如何使用XML中的动画效果 1 2 3 4 5 6 7 8 /** *Context 为程序的上下文 *id 为动画XML文件的引用 **/ public static Animation loadAnimation (Context context, int id) //例子: myAnimation= AnimationUtils.loadAnimation( this ,R.anim.my_action); //使用AnimationUtils类的静态方法loadAnimation()来加载XML中的动画XML文件 5.Android动画解析--JavaCode A.AlphaAnimation ① AlphaAnimation类对象定义 1 private AlphaAnimation myAnimation_Alpha; ② AlphaAnimation类对象构造 1 2 3 4 5 6 7 AlphaAnimation(float fromAlpha, float toAlpha) //第一个参数fromAlpha为 动画开始时候透明度 //第二个参数toAlpha为 动画结束时候透明度 myAnimation_Alpha= new AlphaAnimation( 0 .1f, 1 .0f); //说明: // 0.0表示完全透明 // 1.0表示完全不透明 1 2 myAnimation_Alpha.setDuration( 5000 ); //设置时间持续时间为 5000毫秒 ③ 设置动画持续时间 1 2 myAnimation_Alpha.setDuration( 5000 ); //设置时间持续时间为 5000毫秒 B.ScaleAnimation ① ScaleAnimation类对象定义 1 private AlphaAnimation myAnimation_Alpha; ② ScaleAnimation类对象构造 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue) //第一个参数fromX为动画起始时 X坐标上的伸缩尺寸 //第二个参数toX为动画结束时 X坐标上的伸缩尺寸 //第三个参数fromY为动画起始时Y坐标上的伸缩尺寸 //第四个参数toY为动画结束时Y坐标上的伸缩尺寸 /*说明: 以上四种属性值 0.0表示收缩到没有 1.0表示正常无伸缩 值小于1.0表示收缩 值大于1.0表示放大 */ //第五个参数pivotXType为动画在X轴相对于物件位置类型 //第六个参数pivotXValue为动画相对于物件的X坐标的开始位置 //第七个参数pivotXType为动画在Y轴相对于物件位置类型 //第八个参数pivotYValue为动画相对于物件的Y坐标的开始位置 myAnimation_Scale = new ScaleAnimation( 0 .0f, 1 .4f, 0 .0f, 1 .4f, Animation.RELATIVE_TO_SELF, 0 .5f, Animation.RELATIVE_TO_SELF, 0 .5f); ③ 设置动画持续时间 1 2 myAnimation_Scale.setDuration( 700 ); //设置时间持续时间为 700毫秒 C.TranslateAnimation ① TranslateAnimation类对象定义 1 private AlphaAnimation myAnimation_Alpha; ② TranslateAnimation类对象构造 1 2 3 4 5 6 TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta) //第一个参数fromXDelta为动画起始时 X坐标上的移动位置 //第二个参数toXDelta为动画结束时 X坐标上的移动位置 //第三个参数fromYDelta为动画起始时Y坐标上的移动位置 //第四个参数toYDelta为动画结束时Y坐标上的移动位置 ③ 设置动画持续时间 1 2 myAnimation_Translate.setDuration( 2000 ); //设置时间持续时间为 2000毫秒 D.RotateAnimation ① RotateAnimation类对象定义 1 private AlphaAnimation myAnimation_Alpha; ② RotateAnimation类对象构造 1 2 3 4 5 6 7 8 9 10 RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue) //第一个参数fromDegrees为动画起始时的旋转角度 //第二个参数toDegrees为动画旋转到的角度 //第三个参数pivotXType为动画在X轴相对于物件位置类型 //第四个参数pivotXValue为动画相对于物件的X坐标的开始位置 //第五个参数pivotXType为动画在Y轴相对于物件位置类型 //第六个参数pivotYValue为动画相对于物件的Y坐标的开始位置 myAnimation_Rotate= new RotateAnimation( 0 .0f, + 350 .0f, Animation.RELATIVE_TO_SELF, 0 .5f,Animation.RELATIVE_TO_SELF, 0 .5f); ③ 设置动画持续时间 1 2 myAnimation_Rotate.setDuration( 3000 ); //设置时间持续时间为 3000毫秒 如何使用Java代码中的动画效果 使用从View父类继承过来的方法startAnimation()来为View或是子类View等等添加一个动画效果 1 public void startAnimation (Animation animation) 恩恩!差不多完了,这样看着爽多了哈~ 本文转自zhf651555765 51CTO博客,原文链接:http://blog.51cto.com/smallwoniu/1249022,如需转载请自行联系原作者

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

iOS开发 ARC下dealloc的使用

在MRC时代,我们需要在 dealloc中做很多,比如释放对象,等等; 如今我们已经进入ARC时代,对于普通对象的释放,系统已经帮我们做好了; 那是否可以高枕无忧了呢?在ARC下我们应该做什么? 观点: ARC下,系统可以帮我们释放该对象,及其包含的对象; 但是却无法释放不属于该对象的一些东西,如: 1.通知的观察者,或KVO的观察者 由于通知中心是系统的一个单例,你在注册通知的观察者时,实际上是在通知中心注册的, 这时,即使ARC下系统帮我们释放了对象,但是在通知中心的观察还是没有移除,那么当有 该通知时,依然会尝试调用该对象的接受通知的方法,这可能会导致一些问题. 这一点有点像,你晚上六点下班了...但是却没有刷卡..., 2.对象强委托/引用的解除(例如XMPPMannerger的delegateQueue) 对于其他的对象来把你当做委托 delegate时,并且是 强引用时,即时你自身被释放,但是引用你的对象依然还在, 这时需要在引用你的对象移除该delegate 3.做一些其他的注销之类的操作(关闭程序运行期间没有关闭的资源) 一个对象,如一个ViewController在销毁之前有可能需要和server打交道; 这时我们也可以在dealloc中写 关于dealloc的底层实现,可以参照objc运行时代码 示例,ARC下我们应该做的: [html]view plaincopy -(void)dealloc { [[NSNotificationCenterdefaultCenter]removeObserver:self];//移除通知观察者 [[XMPPManagersharedManager]removeFromDelegateQueue:self];//移除委托引用 [[MyClassshareInstance]doSomething]//其他操作 } ARC下我们没必要做的 [html]view plaincopy -(void)dealloc { _name=nil; [_timeinvalid]; } [html]view plaincopy 总结:dealloc在ARC下的作用就是释放系统无法释放的该对象占用的资源,或者其他对象对该对象的引用. 原文出自:http://blog.csdn.net/yangbingbinga/ 本文转自ljianbing51CTO博客,原文链接:http://blog.51cto.com/ljianbing/1871811,如需转载请自行联系原作者

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

Android开发实践:编译VLC-for-android

1. 准备编译环境 基本上按照这篇wiki的介绍就足够了,为了顺利完成编译,建议首先保证相关的软件或者依赖库都已经下载好了,我再强调一下几个重点注意事项。 (1) Android SDK:必须使用SDK Platform Android 5.0, API 21,因为VLC-for-android用到了Android 5.0 的一些API。 (2) 最好通过apt-get install 把下面这些依赖的软件都安装一遍,或更新到最新版 git,apache-ant (or ant), autoconf, automake, autopoint, cmake, gawk (or nawk), gcc, g++, libtool, m4, patch, pkg-config, ragel, subversion, unzip. 2. 下载源码包 直接通过git下载VLC-for-android最新的源码即可: 1 gitclonegit: //git .videolan.org /vlc-ports/android .git 3. 编译VLC源码和VLC Android工程 (1) 配置编译环境变量 具体参考wiki的介绍,你可以写个shell脚本来执行,避免每次编译都要配置,下面是我的环境变量,可以根据你的路径修改: 1 2 3 4 5 6 #!/bin/sh export ANDROID_SDK= /opt/android/sdk/ export ANDROID_NDK= /opt/android/android-ndk-r10/ export ANT_DIR= /opt/android/ant/ export PATH=$PATH:$ANDROID_SDK /platform-tools :$ANDROID_SDK /tools :$ANT_DIR export ANDROID_ABI=armeabi-v7a (2) 执行编译 1 shcompile.sh VLC不愧是使用这么广泛的播放器,它的编译脚本写得非常强大和智能,直接通过执行compile.sh,它会自动check所有的依赖,并通过网络去下载缺失的库。 首先,它会下载vlc的源码,并存放在当前目录下。然后去下载依赖的第三方库文件。 当然,由于GFW的存在,有的时候下载会失败,这个时候,就需要你手动去Google搜索它正在下载的依赖文件,手动下载好了之后放到 vlc/contrib/tarballs目录下,然后再回到命令行重新执行 sh compile.sh 它依赖的全部第三方库文件如图所示: (3) 编译问题 编译过程还算顺利,只出现过一个大问题,如下: 1 2 3 google /protobuf/unittest .proto:853:21:Missingfieldnumber. google /protobuf/unittest .proto:862:1:Reachedendofinput in messagedefinition(missing '}' ). make [3]:***[unittest_proto_middleman]Error1 网上也搜不到解决方案,我看了下GitHub上Protobuf的Readme,然后下载了最新的protobuf放到vlc/contrib/tarballs/contrib-android-arm-linux-androideabi/protobuf目录下,执行./configure --disable-shared,再编译,没想到就直接过了。 4. 加载VLC-For-Android的Java工程 编译通过后,就可以直接在vlc-android/bin目录下看到debug版的apk了,下面简单说说在Eclipse中加载vlc-android的整个工程。 打开Eclipse,选择Import,把vlc-for-android目录下所有的工程到导入到Eclipse中(我去掉了TV工程),如图所示,有5个必须的工程,其中,VLC是主工程,其他四个都是Lib工程。没有什么意外的话,直接运行VLC工程,就可以在Android手机上看到VLC播放器应用了! 本文转自 Jhuster 51CTO博客,原文链接:http://blog.51cto.com/ticktick/1586072,如需转载请自行联系原作者

资源下载

更多资源
腾讯云软件源

腾讯云软件源

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

Nacos

Nacos

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

Sublime Text

Sublime Text

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

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册