看别人博客,有些小技巧就直接转过来了,以后做开发可以大大提高开发效率。以下代码片摘自多个博客和自己平时的学习积累,若原作者认为侵犯著作权,请私信告知,我看到后讲第一时间删除。
一、 获取系统版本号:
PackageInfo info = this.getPackageManager().getPackageInfo(this.getPackageName(), 0); int versionCode=nfo.versionCode string versionName=info.versionNam
二、获取系统信息:
String archiveFilePath="sdcard/download/Law.apk";//安装包路径 PackageManager pm = getPackageManager(); PackageInfo info = pm.getPackageArchiveInfo(archiveFilePath, PackageManager.GET_ACTIVITIES); if(info != null){ ApplicationInfo appInfo = info.applicationInfo; String appName = pm.getApplicationLabel(appInfo).toString(); String packageName = appInfo.packageName; //得到安装包名称 String version=info.versionName; //得到版本信息 Toast.makeText(test4.this, "packageName:"+packageName+";version:"+version, Toast.LENGTH_LONG).show(); Drawable icon = pm.getApplicationIcon(appInfo);//得到图标信息 TextView tv = (TextView)findViewById(R.id.tv); //显示图标 tv.setBackgroundDrawable(icon);
三、获取安装路径和已安装程序列表
android中获取当前程序路径 getApplicationContext().getFilesDir().getAbsolutePath() (2)android取已安装的程序列表 List<PackageInfo> packageInfoList = getPackageManager().getInstalledPackages(0);
四、获取图片、应用名、包名
PackageManager pManager = MessageSendActivity.this.getPackageManager(); List<PackageInfo> appList = Utils.getAllApps(MessageSendActivity.this); for(int i=0;i<appList.size();i++) { PackageInfo pinfo = appList.get(i); ShareItemInfo shareItem = new ShareItemInfo(); //set Icon shareItem.setIcon(pManager.getApplicationIcon(pinfo.applicationInfo)); //set Application Name shareItem.setLabel(pManager.getApplicationLabel(pinfo.applicationInfo).toString()); //set Package Name shareItem.setPackageName(pinfo.applicationInfo.packageName); }
五、解决listview上 Item上有按钮时 item本身不能点击的问题
1. 在item试图上面添加代码: android:descendantFocusability="blocksDescendants" 2.在listview里 添加代码 android:focusable="true"
六、不让文本框输入中文:
android:digits="1234567890qwertyuiopasdfghjklzxcvbnm`-=[]\;,./[email protected]#$%^*()_+}{:?&<>"'" 这样就不会输入中文了。
七、获取屏幕宽高
DisplayMetrics displayMetrics = new DisplayMetrics(); this.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); int height = displayMetrics.heightPixels; int width = displayMetrics.widthPixels;
八、将TabWidget显示在屏幕下方
设置TabWidget的属性 android:layout_alignParentBottom="true"
九、获取线程ID和线程名称:
Log.v("@@@@@@@@@@",Thread.currentThread().getId()+" "+Thread.currentThread().getName());
十、android中调用其它android应用
ComponentName comp = new ComponentName("com.Test","com.login.Main"); intent = new Intent(); intent.setComponent(comp); intent.setAction("android.intent.action.VIEW"); startActivity(intent);
十一、禁止软键盘弹出
EditText有焦点(focusable为true)阻止输入法弹出 editText.setInputType(InputType.TYPE_NULL); // 关闭软键盘 当EidtText无焦点(focusable=false)时阻止输入法弹出
InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
【Android】EditText标签调用键盘
在xml文件中EditText标签有一个属性android:editable="false"和android:numeric="integer"
android:numeric="integer"表示只允许输入数字,此属性可以限制用户只能输入数字内容。
android:editable表示是否可以输入内容TRUE表示可以输入,false表示不允许输入内容;
当为android:editable="false"时,点击输入框,虚拟键盘是显示不出来的,不过当设置了 android:editable=""属性时,不管是false还是true,在其后加入android:numeric="integer"属性时,是可以输入数字内容了;这里没搞明白是怎么回事,也许是numeric把前面的属性覆盖掉了。
当android:editable="false"时,在java类里如果再规定EditText.setEnabled(true)时,虚拟键盘还是不会显示的。
十二、模拟器的各种规格与分辨率对照:
单位:像素 WVGA854: 854*480 WVGA800: 800*480 HVGA: 480*320 QVGA: 320*240 WQVGA432:432*240 WQVGA400:400*240
十三、调用Android其他Context的Activity
Context c = createPackageContext("chroya.demo", Context.CONTEXT_INCLUDE_CODE | Context.CONTEXT_IGNORE_SECURITY); //载入这个类 Class clazz = c.getClassLoader().loadClass("chroya.demo.Main"); //新建一个实例 Object owner = clazz.newInstance(); //获取print方法,传入参数并执行 Object obj = clazz.getMethod("print", String.class).invoke(owner, "Hello");
这个方法有两个参数:
1、packageName 包名,要得到Context的包名
2、 flags 标志位,有CONTEXT_INCLUDE_CODE和CONTEXT_IGNORE_SECURITY两个选项。 CONTEXT_INCLUDE_CODE的意思是包括代码,也就是说可以执行这个包里面的代码。CONTEXT_IGNORE_SECURITY的意思
是忽略安全警告,如果不加这个标志的话,有些功能是用不了的,会出现安全警告。
十四、android4.0Dialog风格小技巧
4.0上如果还用Theme.Dialog,只能说很土,跟整体UI风格差别很大
请使用android:theme="@android:style/Theme.Holo.DialogWhenLarge"
十五、程序中安装apk(其中“apk”为你要安装的那个文件)
Intent intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(android.content.Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(“APK”),"application/vnd.android.package-archive"); startActivity(intent);
十六、获取设备型号、SDK版本及系统版本
String device_model = Build.MODEL; // 设备型号 String version_sdk = Build.VERSION.SDK; // 设备SDK版本 String version_release = Build.VERSION.RELEASE; // 设备的系统版本
十七、图片分析功能
public void SharePhoto(String photoUri,final Activity activity) { Intent shareIntent = new Intent(Intent.ACTION_SEND); File file = new File(photoUri); shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file)); shareIntent.setType("image/jpeg"); StartActivity(Intent.createChooser(shareIntent, activity.getTitle())); }
十八、linux关机命令(乱入一条)
在Windows下,按着电源键4秒强制关机,在Linux下强烈不建议这么做。Windows由于是单用户、“假多”任务的情况,所以即使你的计算机关机,也不会对别人造成影响。不过在Linux中,由于每个程序都是在后台执行的,因此,在你看不到的屏幕背后可能有很多人同时在你的主机上工作。而且,若不正常关机可能会造成文件系统的损毁。所以,正常情况下,要关机时需要注意下面几件事情:
(1)查看系统的使用状态。
要看目前有谁在线,可以用who命令。要看网络的联机状态,可以用netstat-a命令。要看后台执行那个的程序可以执行ps-aux命令。
(2)通知在线用户的关机时刻
这个时候可以使用shutdown命令
Shutdown命令: 语法:shutdown[-t秒][-arkhncfF]时间 警告消息 -t:后面加描述表示过几秒之后关机。 -k:不是真的关机,仅仅发出警告消息。 -r:将系统服务停掉之后重启。 -h:将系统服务停掉之后立即关机。 -f:关机并开机之后,强制跳过fsck的磁盘检查。 -F:系统重启之后,强制进行fsck的磁盘检查。 -c:取消已经进行的shutdown命令内容。 另外,重启关机命令有reboot、halt、poweroff。其实在默认情况下,都完成一样的工作。 halt先调用shutdown,而shutdown最后调用halt。不过,shutdown可以根据目前已经启动的服务来逐次关闭服务后才关机;而halt能够在不理会目前系统情况下,进行硬件关机的特殊功能。 除了这些,还有一个关机命令是init 0 init是切换执行等级的命令。Linux共有7种执行等级,比较重要的是下面4种等级: run level 0:关机 run level 3:纯命令行模式 run level 5:含有图形界面模式 run level 6:重启
十九、让自己的应用不被kill掉
可以在frameworks\base\services\java\com\android\server\am\ActivityManagerService.java这个类的forceStopPackage中加一个条件:
public void forceStopPackage(final String packageName) { if (checkCallingPermission(android.Manifest.permission.FORCE_STOP_PACKAGES) != PackageManager.PERMISSION_GRANTED) { String msg = "Permission Denial: forceStopPackage() from pid=" + Binder.getCallingPid() + ", uid=" + Binder.getCallingUid() + " requires " + android.Manifest.permission.FORCE_STOP_PACKAGES; Slog.w(TAG, msg); throw new SecurityException(msg); } long callingId = Binder.clearCallingIdentity(); try { IPackageManager pm = ActivityThread.getPackageManager(); int pkgUid = -1; synchronized(this) { try { pkgUid = pm.getPackageUid(packageName); } catch (RemoteException e) { } if (pkgUid == -1) { Slog.w(TAG, "Invalid packageName: " + packageName); return; } //begin:加入一个判断条件 if (packageName.equals("你的进程名")) { return; } //end: 加入一个判断条件 forceStopPackageLocked(packageName, pkgUid); } } finally { Binder.restoreCallingIdentity(callingId); } }
这样的话在任务管理器里可以保证KISS不掉的;
还有在这个方法上还有个方法clearApplicationUserData中保证如果是该进程就不让调用forceStopPackage()方法。
另:其他方法:
1,首先在你的service的onDestory方法里面写上启动你自己的代码,为什么要写这个?因为如果用户是在设置->应用程序->正在运行服务这里面杀掉你service的话会调用到onDestory方法的,这里就可以启动了,
2:监听屏幕关闭广播,屏幕已关闭,就启动服务。
3:监听屏幕解锁广播,一样的道理,这样,基本上,你的service就达到永不停止了。对用户来说有点变态,但很多软件都这样。
二十、EditText获取焦点:
EditText.requestFoucus()
二十一、获取手机屏幕分辨率
DisplayMetrics dm = new DisplayMereics(); getWindowManager().getDefaultDisplay().getMetrics(dm); float width = dm.widthPixels * dm.density; float height = dm.heightPixels * dm.density
二十二、在Activity里面播放背景音乐
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mainlay); mediaPlayer = MediaPlayer.create(this, R.raw.mu); mediaPlayer.setLooping(true); mediaPlayer.start(); }
二十三、让程序的界面不随机器的重力感应而翻转
第一种方法,在manifast文件里面
<activity android:screenOrientation="portrait"> </activity>
第二种,在代码里面
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
二十四、使activity全屏显示
requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN ,WindowManager.LayoutParams. FLAG_FULLSCREEN);
二十五、在RelativeLayout中使selector要注意点
关于selector的使用方法,可以参考http://blog.csdn.net/aomandeshangxiao/article/details/6759576这篇文章,今天,遇到在RelativeLayout中添加background为selector后没有反应的问题,寻摸了很长时间,一直没有找到原因,其实只要加上一句代码就完全可以解决:
RelativeLayout 里面加上android:clickable="true"
二十六、显示或隐藏虚拟键盘
显示: InputMethodManager imm = (InputMethodManager)(getSystemService(Context.INPUT_METHOD_SERVICE)); imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); 隐藏: InputMethodManager imm = (InputMethodManager)(getSystemService(Context.INPUT_METHOD_SERVICE)); imm.hideSoftInputFromWindow(m_edit.getWindowToken(), 0);
二十七、退出程序时清除通知中信息
NotificationManager nm = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); nm.cancelAll();
二十八、创建快捷方式
Intent intent=new Intent(); //设置快捷方式的图标 intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(this, R.drawable.img)); //设置快捷方法的名称 intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "点击启动哥的程序"); //设置点击快键图标的响应操作
intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(this,MainActivity.class)); //传递Intent对象给系统 setResult(RESULT_OK, intent); finish();
二十九、获取文件中的类名:
String path = context.getPackageManager().getApplicationInfo( context.getPackageName(), 0).sourceDir; DexFile dexfile = new DexFile(path); Enumeration<String> entries = dexfile.entries(); while (entries.hasMoreElements()) { String name = (String) entries.nextElement(); ...... }
三十. TextView中的getTextSize返回值是以像素(px)为单位的,
而setTextSize()是以sp为单位的.
所以如果直接用返回的值来设置会出错,解决办法是:
用setTextSize()的另外一种形式,可以指定单位
TypedValue.COMPLEX_UNIT_PX : Pixels TypedValue.COMPLEX_UNIT_SP : Scaled Pixels TypedValue.COMPLEX_UNIT_DIP : Device Independent Pixels
三十一. 在继承自View时,绘制bitmap时,需要将图片放到新建的drawable-xdpi
中,否则容易出现绘制大小发生改变
三十二. 在文字中加下划线: textView.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG);
三十三. scrollView是继承自frameLayout,所以在使用LayoutParams时需要用frameLayout的
三十四、android阴影字体设置
<TextView android:id="@+id/tvText1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="text1" android:textSize="30sp" android:textStyle="bold" android:textColor="#FFFFFF" android:shadowColor="#ff0000ff" android:shadowDx="5" android:shadowDy="5" android:shadowRadius="10"/>
android:shadowColor 阴影颜色
android:shadowDx 阴影的水平偏移量
android:shadowDy 阴影的垂直偏移量
android:shadowRadius 阴影的范围
为了统一风格和代码的复用,通常可以把这个样式抽取放入到style.xml文件中
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="textstyle"> <item name="android:shadowColor">#ff0000ff</item> <item name="android:shadowRadius">10</item> <item name="android:shadowDx">5</item> <item name="android:shadowDy">5</item> </style> </resources>
<TextView style="@style/textstyle" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="字体样式" android:textSize="30sp" android:textStyle="bold" />
三十五、android实现手机震动功能(这个还可以创建一个数组来控制震动,达到震动几秒然后再震动几秒,,你懂得)
import android.app.Activity; import android.app.Service; import android.os.Vibrator; public class TipHelper { public static void Vibrate(final Activity activity, long milliseconds) { Vibrator vib = (Vibrator) activity.getSystemService(Service.VIBRATOR_SERVICE); vib.vibrate(milliseconds); } public static void Vibrate(final Activity activity, long[] pattern,boolean isRepeat) { Vibrator vib = (Vibrator) activity.getSystemService(Service.VIBRATOR_SERVICE); vib.vibrate(pattern, isRepeat ? 1 : -1); } }
还需要在AndroidManifest.xml 中添加震动权限:
<uses-permission android:name="android.permission.VIBRATE" />
通过上面操作,我们可以使用TipHelper所定义的函数了。两个Vibrate函数的参数简单介绍如下:
final Activity activity :调用该方法的Activity实例
long milliseconds :震动的时长,单位是毫秒
long[] pattern
:自定义震动模式 。数组中数字的含义依次是[静止时长,震动时长,静止时长,震动时长。。。]时长的单位是毫秒
boolean isRepeat : 是否反复震动,如果是true,反复震动,如果是false,只震动一次
三十六、常用的正则表达式
^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$ //email地址
^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$ //url
^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$ //年-月-日
^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$ //月/日/年
^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$ //Emil
^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?([0-9]{7,8})(\-[0-9]+)?$ //电话号码
^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$ //IP地址
(^\s*)|(\s*$) // 首尾空格
^[a-zA-Z][a-zA-Z0-9_]{4,15}$ // 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线)
^[1-9]*[1-9][0-9]*$ // 腾讯QQ号
三十七、输入框不挤压activity布局
在manifest的activity下添加
- android:windowSoftInputMode="adjustPan"
三十八、listview中item中button可点击:
android:descendantFocusability="blocksDescendants"
三十九、获取移动设备的IP地址:
public class Tools { public static String getLocalIpAddress() { try { for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { NetworkInterface intf = en.nextElement(); for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { InetAddress inetAddress = enumIpAddr.nextElement(); if (!inetAddress.isLoopbackAddress()) { return inetAddress.getHostAddress().toString(); } } } } catch (SocketException ex) { Log.e("出错啦", ex.toString()); } return null; } } 然后 WifiManager wm = (WifiManager)getSystemService(WIFI_SERVICE); WifiInfo wi = wm.getConnectionInfo(); System.out.println("IP地址是:"+Tools.getLocalIpAddress()); System.out.println("SSID:"+wi.getSSID()); 最后记得加两个权限 <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
四十、高仿小米launcher跨屏拖动item(GridView长按item进行拖动
触发长按事件后浮动原理:
windowParams = new WindowManager.LayoutParams(); windowParams.gravity = Gravity.TOP | Gravity.LEFT; windowParams.x = x - itemWidth / 2; windowParams.y = y - itemHeight / 2; windowParams.height = WindowManager.LayoutParams.WRAP_CONTENT; windowParams.width = WindowManager.LayoutParams.WRAP_CONTENT; ImageView iv = new ImageView(getContext()); iv.setImageBitmap(bm); windowManager = (WindowManager) getContext().getSystemService( Context.WINDOW_SERVICE);// "window" windowManager.addView(iv, windowParams);
拖动效果:
if (dragImageView != null) { windowParams.alpha = 0.6f; windowParams.x = x - itemWidth / 2; windowParams.y = y - itemHeight / 2; windowManager.updateViewLayout(dragImageView, windowParams); }
四十一、数据库写入图片信息:
数据库中的字段设置为 binary类型 Bitmap bitmap = BitmapFactory.decodeFile(path); ByteArrayOutputStream baos = new ByteArrayOutputStream(); bitmap.compress(CompressFormat.JPEG, 50, baos); String sql = "insert into pic_info(pic_data, pic_name,pic_size,send_date,is_success) " +"values(?,?,?,?,?)"; Object[] args = new Object[]{baos.toByteArray(), name, size, now, isSucess}; db.insert(sql, args); 读取数据库的图片信息: byte[] picData = cursor.getBlob(cursor.getColumnIndex("pic_data")); bitmap.setImageBitmap(BitmapFactory.decodeByteArray(picData, 0, picData.length));
四十二、listView的addView的问题。
在listView里使用addView()、addFooterView(v)、addHeaderView(v)时,要在setAdepter以前添加,或者在重写的Adapter中添加。因为setAdapter以后,就是listView已经绘制完毕,不能再进行添加。
四十三、progressBar修改颜色
有的时候,我们使用progressBar的时候,后面的背景色是白色或者是亮色,使得progressBar效果很不明显,所以,我们可以在下面三条中随意添加一条熟悉就可以了:
<ProgressBar style="@android:style/Widget.ProgressBar.Inverse"/> <ProgressBar style="@android:style/Widget.ProgressBar.Large.Inverse"/> <ProgressBar style="@android:style/Widget.ProgressBar.Small.Inverse"/>
四十四、窗口透明(背景模糊等)
先看下效果图:
第一种效果:
在styles.xml中定义
<style name="Theme.Translucent" parent="android:style/Theme.Translucent"> <item name="android:windowBackground"> @drawable/translucent_background </item> <item name="android:windowNoTitle">true</item> <item name="android:colorForeground">#fff</item> </style>
第二种效果是在源代码里面修改,在onCreate方法里面添加:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,WindowManager.LayoutParams.FLAG_BLUR_BEHIND); setContentView(R.layout.translucent_background);
设置模糊效果是通过窗口管理器(WindowManager)设置参数来完成的,这种设置只有在背景设置为透明后才能显示效果。
四十五、Android输入框和文本框滚动条ScrollView
我们都知道EditText与TextView是Android的文本输入框和文本显示框,但是基于手机屏幕的大小因素,如果在需要输入较多文字或者显示较多内容的时候,手机屏幕是远远不够的,因此让文本框具有滚动条的功能是手机上必备的,要加上滚动条,其实很简单,只需要在文本输入框或者文本显示框上面加上滚动条控件即可,该控件名字为ScrollView,以下我们对比下(以TextView举例)。
<ScrollView android:id="@+id/scrollView" android:layout_width="fill_parent" android:layout_height="200px" android:scrollbarStyle="outsideOverlay" android:background="@android:drawable/edit_text"> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/textView" /> </ScrollView>
四十六、Android模拟器启动内存错误(内存不能为read)
|
如图
运行模拟器的时候总是会内存错误。 |
这种情况偶尔出现,没什么关系,不用管他。点击‘取消’就可以了。
经常出现就危险了,弄不好就得重装系统了。
运行某些程序的时候,有时会出现内存错误的提示,然后该程序就关闭。
“0x????????”指令引用的“0x????????”内存。该内存不能为“read”。
“0x????????”指令引用的“0x????????”内存,该内存不能为“written”。
一般出现这个现象有方面的,一是硬件,即内存方面有问题,二是软件
开始 运行 输入:cmd 确定:
在DOS提示符下输入:
for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1
等待3分钟,左右后,搞定了。(如果怕输错,就把这句话复制上去)。
四十七、通过路径获取媒体文件信息
通过路径获取媒体文件信息 http://blog.csdn.net/aomandeshangxiao/article/details/6600725
四十八、Java中有用的文件操作
java文件操作 http://blog.csdn.net/aomandeshangxiao/article/details/6597302
四十九、Android文件读写
Android文件的读写 http://blog.csdn.net/aomandeshangxiao/article/details/6589510
五十、 scaleType属性与ImagView中图片的显示的关系
五十一、 Notification的属性notification的各种属性:
http://blog.csdn.net/aomandeshangxiao/article/details/6608101
五十二、Android控件实现震动:
先在res下面新创建anim文件夹,在该文件夹中创建shake.xml文件:
<?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="1000" android:fromYDelta="0" android:toYDelta="10" android:fromXDelta="0" android:toXDelta="10" android:interpolator="@anim/cycle_7" />
最后引用了cycle_7,再在该文件夹中创建cycle_7.xml文件
<?xml version="1.0" encoding="utf-8"?> <cycleInterpolator xmlns:android="http://schemas.android.com/apk/res/android" android:cycles="10" />
在Java代码里面:
Animation shake = AnimationUtils.loadAnimation(this, R.anim.shake); findViewById(R.id.image).startAnimation(shake);
五十三、Android 页面切换动画效果
http://hi.baidu.com/fountainblog/blog/item/66cb9918b0220eaa4bedbc2e.html
五十四、Android2.2完全退出程序
http://www.eoeandroid.com/thread-62284-1-1.html
五十五、Android按下back键非退出隐藏到后台
public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { Intent intent = new Intent(Intent.ACTION_MAIN); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addCategory(Intent.CATEGORY_HOME); startActivity(intent); return true; } return super.onKeyDown(keyCode, event); }
五十六、在Android开发中使用Gallery实现多级联动
http://mobile.51cto.com/hot-230282.htm
五十七、获取view在屏幕中的位置:
int[] points = { 0, 0 }; view.getLocationInWindow(points);
这里用数组存储view的x和y坐标,point[0]是x坐标,point[1]是y坐标。
五十八、在图形中添加文字
@Override protected synchronized void onDraw(Canvas canvas) { super.onDraw(canvas); Rect rect = new Rect(); this.mPaint.getTextBounds(this.text, 0, this.text.length(), rect); int x = (getWidth() / 2) - rect.centerX(); int y = (getHeight() / 2) - rect.centerY(); canvas.drawText(this.text, x, y, this.mPaint); }
五十九、使用Vibrator实现手机震动
@Override public boolean onTouchEvent(MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_DOWN){ vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE); long[] pattern = {800, 40,400, 30}; // OFF/ON/OFF/ON... vibrator.vibrate(pattern, 2);//-1不重复,非-1为从pattern的指定下标开始重复 } return super.onTouchEvent(event); }
六十、界面重绘
invalidate()或者view.postinvalidate()方法
未完待续。。。。