大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > Android技巧 > android入门基础知识详解

android入门基础知识详解(5)

关键词:基础知识android  阅读(3061) 赞(13)

[摘要]本文是对android基础知识的讲解,对学习Android编程技术有所帮助,与大家分享。

17.动画特效

17.1.Frame

Ÿ通过多个画面连续播放实现动画效果

Ÿ详见文档android-sdk-windows/docs/guide/topics/resources/animation-resource.html

17.2.Tween

Ÿ将某个组件以渐变的方式实现透明、缩放、移动、旋转等动画效果

Ÿ详见文档android-sdk-windows/docs/guide/topics/resources/animation-resource.html

17.3.使用动画切换Activity

Ÿ在startActivity()方法调用之后调用overridePendingTransition(intenterAnim,intexitAnim)方法

enterAnim进入的动画资源id

exitAnim退出的动画 资源id

17.4.使用动画翻页

ŸXML配置

<ViewFlipper

android:id="@+id/viewFlipper"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

<ImageView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@drawable/bb2"

/>

<ImageView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@drawable/bb3"

/>

</ViewFlipper>

ŸJava代码

publicbooleanonTouchEvent(MotionEventevent){

ViewFlipperviewFlipper=(ViewFlipper)findViewById(R.id.viewFlipper);

switch(event.getAction()){

caseMotionEvent.ACTION_DOWN:

start=event.getX();

break;

caseMotionEvent.ACTION_UP:

floatend=event.getX();

if(end>start){

viewFlipper.setInAnimation(this,R.anim.previous_enter);

viewFlipper.setOutAnimation(this,R.anim.previous_exit);

viewFlipper.showPrevious();

}elseif(end<start){

viewFlipper.setInAnimation(this,R.anim.next_enter);

viewFlipper.setOutAnimation(this,R.anim.next_exit);

viewFlipper.showNext();

}

break;

}

returnsuper.onTouchEvent(event);

}

18.其他

18.1.传感器

  • 传感器参数

Ÿ传感器类型

方向 Sensor.TYPE_ORIENTATION

加速 Sensor.TYPE_ACCELEROMETER

光线 Sensor.TYPE_LIGHT

磁场 Sensor.TYPE_MAGNETIC_FIELD

距离 Sensor.TYPE_PROXIMITY

温度 Sensor.TYPE_TEMPERATURE

Ÿ传感器反应速度

SensorManager.SENSOR_DELAY_FASTEST

SensorManager.SENSOR_DELAY_GAME

SensorManager.SENSOR_DELAY_UI

SensorManager.SENSOR_DELAY_NORMAL

  • 使用方向传感器

Ÿ获得传感器管理器

SensorManagermanager=(SensorManager)getSystemService(SENSOR_SERVICE);

Ÿ获得方向传感器

Sensorsensor=manager.getDefaultSensor(Sensor.TYPE_ORIENTATION);

Ÿ注册监听器

manager.registerListener(listener,sensor,SensorManager.SENSOR_DELAY_NORMAL);

Ÿ监听器

privatefinalclassMySensorEventListenerimplementsSensorEventListener{

publicvoidonSensorChanged(SensorEventevent){

System.out.println(event.values[0]);

}

publicvoidonAccuracyChanged(Sensorsensor,intaccuracy){

}

}

Ÿ取消监听器

manager.unregisterListener(listener,sensor);

18.2.触摸事件

  • 拖拽

ŸXML配置

<ImageView

android:id="@+id/image"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:scaleType="matrix"

android:src="@drawable/image"/>

ŸJava代码

ImageViewimageView=(ImageView)findViewById(R.id.image);

imageView.setOnTouchListener(newMyOnTouchListener());


privateclassMyOnTouchListenerimplementsOnTouchListener{

privatefloatx;

privatefloaty;

privateMatrixcurrentMatrix=newMatrix(); //用来操作图片的矩阵

privateMatrixoldMatrix=newMatrix();


publicbooleanonTouch(Viewv,MotionEventevent){

switch(event.getAction()){

caseMotionEvent.ACTION_DOWN: //按下时

x=event.getX(); //获取x轴坐标

y=event.getY(); //获取y轴坐标

oldMatrix.set(imageView.getImageMatrix()); //记住位置

break;

caseMotionEvent.ACTION_MOVE: //移动时

currentMatrix.set(oldMatrix); //设置成按下时记住的位置

currentMatrix.postTranslate(event.getX()-x,event.getY()-y); //改变位置

break;

}

imageView.setImageMatrix(currentMatrix); //移动图片

returntrue;

}

}

  • 多点触摸

privateclassMyOnTouchListenerimplementsOnTouchListener{

privatefloatx; //图片移动前的x轴坐标

privatefloaty; //图片移动前的y轴坐标

privateMatrixcurrentMatrix=newMatrix(); //用来移动图片的矩阵

privateMatrixoldMatrix=newMatrix(); //图片移动前的矩阵

privateinttype; //操作类型,一根手指触摸还是两根手指触摸

privatefloatstart; //第二根手指按下时的距离

privatefloatend; //两根手指移动后的距离

privatePointFpoint; //放大时的中心点


publicbooleanonTouch(Viewv,MotionEventevent){

switch(event.getAction()&MotionEvent.ACTION_MASK){

caseMotionEvent.ACTION_DOWN:

type=1;

x=event.getX();

y=event.getY();

oldMatrix.set(imageView.getImageMatrix());

break;

caseMotionEvent.ACTION_MOVE:

currentMatrix.set(oldMatrix);

if(type==1){ //1根手指触摸

currentMatrix.postTranslate(event.getX()-x,event.getY()-y);

}else{ //2跟手指触摸

end=countDistance(event); //计算结束时距离

floatscale=end/start; //计算缩放比例

currentMatrix.postScale(scale,scale,point.x,point.y); //设置缩放

}

break;

caseMotionEvent.ACTION_POINTER_DOWN:

type=2;

start=countDistance(event); //计算开始时距离

point=countPoint(event); //计算中心点

oldMatrix.set(imageView.getImageMatrix());

break;

}

imageView.setImageMatrix(currentMatrix); //改变图片

returntrue;

}

}


publicfloatcountDistance(MotionEventevent){

floata=event.getX(1)-event.getX(0); //x轴距离

floatb=event.getY(1)-event.getY(0); //y轴距离

return(float)Math.sqrt(a*a+b*b); //勾股定理

}


publicPointFcountPoint(MotionEventevent){

floatx=(event.getX(0)+event.getX(1))/2; //x轴中间点

floaty=(event.getY(0)+event.getY(1))/2; //y轴中间点

returnnewPointF(x,y);

}

18.3.读取SIM卡

  • 电话号码、运营商信息

Ÿ需要权限

<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>

<uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"/>

ŸJava代码

TelephonyManagermanager=(TelephonyManager)getContext().getSystemService(Context.TELEPHONY_SERVICE);

System.out.println("电话号码:"+manager.getLine1Number());

System.out.println("运营商编号:"+manager.getNetworkOperator());

System.out.println("运营商名字:"+manager.getNetworkOperatorName());

  • 联系人

Ÿ需要权限

<uses-permissionandroid:name="android.permission.READ_CONTACTS"/>

<uses-permissionandroid:name="android.permission.WRITE_CONTACTS"/>

ŸJava代码

Uriuri=Uri.parse("content://icc/adn");

Cursorc=getContentResolver().query(uri,null,null,null,null);

while(c.moveToNext())

System.out.println(c.getString(c.getColumnIndex("name"))+":"+c.getString(c.getColumnIndex("number")));

  • 通话记录

Ÿ需要权限

<uses-permissionandroid:name="android.permission.READ_CONTACTS"/>

<uses-permissionandroid:name="android.permission.WRITE_CONTACTS"/>

ŸJava代码

Uriuri=CallLog.Calls.CONTENT_URI;

Cursorc=getContentResolver().query(uri,null,null,null,null);

while(c.moveToNext())

System.out.println(c.getString(c.getColumnIndex("number"))+":"+c.getString(c.getColumnIndex("type")));

Ÿ源代码

ContactsProvider\src\com\android\providers\contacts\CallLogProvider.java

18.4.安装程序

Ÿ需要权限

<uses-permissionandroid:name="android.permission.INSTALL_PACKAGES"/>

ŸJava代码

Filefile=newFile(Environment.getExternalStorageDirectory(),"test.apk");

Intentintent=newIntent();

intent.setAction(Intent.ACTION_VIEW);

intent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive");

startActivity(intent);

18.5.关闭程序

Ÿ杀死当前进程

Process.killProcess(Process.myPid());

Ÿ退出虚拟机

System.exit(0);

Ÿ根据包名关闭后台进程

ActivityManagermanager=(ActivityManager)getSystemService(ACTIVITY_SERVICE);

manager.restartPackage("cn.itcast.test");

<uses-permissionandroid:name="android.permission.RESTART_PACKAGES"/>

18.6.使用HTML构建界面

ŸHTML

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">

<title>Inserttitlehere</title>

<scripttype="text/javascript">

functionshow(jsondata){

varjsonobjs=eval(jsondata);

vartable=document.getElementById("personTable");

for(vary=0;y<jsonobjs.length;y++){

vartr=table.insertRow(table.rows.length);

vartd1=tr.insertCell(0);

vartd2=tr.insertCell(1);

td2.align="center";

vartd3=tr.insertCell(2);

td3.align="center";

td1.innerHTML=jsonobjs[y].name;

td2.innerHTML=jsonobjs[y].amount;

td3.innerHTML="<ahref='javascript:contact.call(\""+jsonobjs[y].phone+"\")'>"+jsonobjs[y].phone+"</a>";

}

}

</script>

</head>

<bodyonload="javascript:contact.showContacts()">

<tableborder="0"width="100%"id="personTable"cellspacing="0">

<tr>

<tdwidth="30%">姓名</td>

<tdwidth="30%"align="center">存款</td>

<tdalign="center">电话</td>

</tr>

</table>

</body>

</html>

ŸXML代码

<WebView

android:id="@+id/webView"

android:layout_width="fill_parent"

android:layout_height="fill_parent"/>

ŸJava代码

publicclassMainActivityextendsActivity{

privateWebViewwebView;

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

webView=(WebView)findViewById(R.id.webView);

webView.getSettings().setJavaScriptEnabled(true);

webView.loadUrl("file:///android_asset/index.html");

webView.addJavascriptInterface(newContact(),"contact");

}

privatefinalclassContact{

publicvoidshowContacts(){

Stringjson="[{\"name\":\"zxx\",\"amount\":\"99999\",\"phone\":\"18600012345\"}]";

webView.loadUrl("javascript:show('"+json+"')");

}

publicvoidcall(Stringphone){

startActivity(newIntent(Intent.ACTION_CALL,Uri.parse("tel:"+phone)));

}

}

}

18.7.apk文件反编译

Ÿ使用解压缩工具打开apk文件,找到其中dex文件

Ÿ创建Java工程,导入dex2jar中的所有jar文件

Ÿ创建运行环境运行其中pxb.android.dex2jar.v3.Main类,指定dex文件地址,会在同目录下生成jar文件

Ÿ使用jd-gui打开jar文件获取源码

«上一页12345下一页»


相关评论