`
wangxiaohigh
  • 浏览: 1458159 次
文章分类
社区版块
存档分类
最新评论

Android点滴

 
阅读更多
如何在一个apk中调用另外一个apk中的activity?
系统提供了很多可以直接调用的Activity,通过指定的Intent就可以调用,比如打开搜索的:
Java代码 收藏代码
  1. Intentintent=newIntent(Intent.ACTION_WEB_SEARCH);
  2. intent.putExtra(SearchManager.QUERY,"searchString")
  3. startActivity(intent);

Intent.ACTION_WEB_SEARCH是一个字符串,是“搜索”这个Activity的标识,extra是传给这个activity的一些数据。发送出这个intent之后,系统根据action字符串Intent.ACTION_WEB_SEARCH知道了是要调用哪个activity,如果有重名,会弹出一个选择对话框。然后打开此activity,实现想要做的事情。
那么,我们自己怎么来实现呢。
首先,写一个activity,在AndroidManifest.xml里面的intent-filter中,给这个activity命名,
Xml代码 收藏代码
  1. <intent-filter>
  2. <actionandroid:name="chroya.foo"/>
  3. <categoryandroid:name="android.intent.category.DEFAULT"/>
  4. </intent-filter>

然后安装。安装完毕之后,你会发现,系统中找不到这个程序。别急,它确实安装在手机里面了,但是因为他不是main的,所以系统不会把他当做Application的入口程序。
而要想打开这个activity,只有知道它名字的人才可以。跟系统的intent一样使用。它的名字定义为"chroya.foo",所以,这里用这个字符串就可以调用它了:
Java代码 收藏代码
  1. Intentintent=newIntent("chroya.foo");
  2. startActivity(intent);

用刚才举的那个系统的intent说明,它的activity里面使用getIntent().getBundleExtra(SearchManager.QUERY)来接收传递进来的搜索字符串参数。而这个SearchManager.QUERY是关键字。如果要自己实现这种功能,只需要定义好关键字,然后从BundleExtra中取就行了。

如何获取屏幕上正显示的activity?
用过ActivityManager的童鞋估计都知道,可以从ActivityManager里面可以获取到当前运行的所有任务,所有进程和所有服务,这是任务管理器的核心。
那么,从里面我们可以发掘点什么出来吗?
仔细看getRunningTasks的文档,里面说获取的是系统中"running"的所有task,"running"状态包括已经被系统冻结的task。而且返回的这个列表是按照顺序排列的,也就是说第一个肯定比第二个后运行。
getRunningTasks有个整型参数,表示返回列表的最大个数。那么,我们如果把1作为参数给进去,那么他返回的task就是当前运行的那个task,然后从task中获取到最顶层的activity,这个activity就是当前显示给用户的那个activity了。
Java代码 收藏代码
  1. ActivityManageram=(ActivityManager)getSystemService(ACTIVITY_SERVICE);
  2. ComponentNamecn=am.getRunningTasks(1).get(0).topActivity;
  3. Log.d("","pkg:"+cn.getPackageName());
  4. Log.d("","cls:"+cn.getClassName());

至于这个能做什么,嘿嘿,我相信你知道的。

如何判断一个activity是否存在于系统中?
已知包名和类名,如何判断这个activity是否在系统中存在呢?很简单,通过intent就行。
Java代码 收藏代码
  1. Intentintent=newIntent();
  2. intent.setClassName("包名","类名");
  3. if(getPackageManager().resolveActivity(intent,0)==null){
  4. //说明系统中不存在这个activity
  5. }


如何让应用程序动态全屏和退出全屏?
让程序全屏的方法,大家都知道,那是静态的,程序运行之初就申明了。但是如果有这样的需求:要在程序运行的过程中,执行了某个操作而使之全屏,然后还需要退出全屏,怎么做?
如下:
Java代码 收藏代码
  1. WindowManager.LayoutParamsattrs=getWindow().getAttributes();
  2. attrs.flags|=WindowManager.LayoutParams.FLAG_FULLSCREEN;
  3. getWindow().setAttributes(attrs);
  4. getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

修改window的LayoutParams参数,然后加上FLAG_LAYOUT_NO_LIMITS标志,就OK了。window会自动重新布局,呈现全屏的状态。
要退出全屏,只需要清除刚才加上的FLAG_FULLSCREEN参数,然后去掉FLAG_LAYOUT_NO_LIMITS标志。
如下:
Java代码 收藏代码
  1. WindowManager.LayoutParamsattrs=getWindow().getAttributes();
  2. attrs.flags&=(~WindowManager.LayoutParams.FLAG_FULLSCREEN);
  3. getWindow().setAttributes(attrs);
  4. getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);


如何获取状态栏和标题栏的高度?
1.获取状态栏高度:
decorView是window中的最顶层view,可以从window中获取到decorView,然后decorView有个getWindowVisibleDisplayFrame方法可以获取到程序显示的区域,包括标题栏,但不包括状态栏。于是,我们就可以算出状态栏的高度了。
Java代码 收藏代码
  1. Rectframe=newRect();
  2. getWindow().getDecorView().getWindowVisibleDisplayFrame(frame);
  3. intstatusBarHeight=frame.top;

2.获取标题栏高度:
getWindow().findViewById(Window.ID_ANDROID_CONTENT)这个方法获取到的view就是程序不包括标题栏的部分,然后就可以知道标题栏的高度了。
Java代码 收藏代码
  1. intcontentTop=getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();
  2. //statusBarHeight是上面所求的状态栏的高度
  3. inttitleBarHeight=contentTop-statusBarHeight;


如何将一个视窗(windows)盖在整个Application的最上面?
Java代码 收藏代码
  1. privateImageViewwaitView;
  2. privatefinalvoidshowWaiting(){
  3. try{
  4. WindowManager.LayoutParamslp=null;
  5. lp=newWindowManager.LayoutParams(
  6. ViewGroup.LayoutParams.WRAP_CONTENT,
  7. ViewGroup.LayoutParams.WRAP_CONTENT,
  8. WindowManager.LayoutParams.TYPE_TOAST,
  9. WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
  10. |WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
  11. |WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
  12. PixelFormat.TRANSLUCENT
  13. |WindowManager.LayoutParams.FIRST_SYSTEM_WINDOW);
  14. WindowManagermWindowManager=(WindowManager)G.appInstance
  15. .getSystemService(Context.WINDOW_SERVICE);
  16. if(waitView==null){
  17. LayoutInflaterinflate=(LayoutInflater)G.appInstance
  18. .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  19. waitView=(ImageView)inflate.inflate(R.layout.waiting_layout,
  20. null);
  21. }
  22. mWindowManager.addView(waitView,lp);
  23. }catch(Throwablee){
  24. }
  25. }

注意:
1. 要将window的类型配置成Type_toast。
2.G.appInstance 上下文需要使用Application的context.

如何判断快捷方式是否已经创建?
快捷方式信息是保存在com.android.launcher的launcher.db的favorites表中
Java代码 收藏代码
  1. booleanisInstallShortcut=false;
  2. finalContentResolvercr=context.getContentResolver();
  3. finalStringAUTHORITY="com.android.launcher.settings";
  4. finalUriCONTENT_URI=Uri.parse("content://"+
  5. AUTHORITY+"/favorites?notify=true");
  6. Cursorc=cr.query(CONTENT_URI,
  7. newString[]{"title","iconResource"},
  8. "title=?",
  9. newString[]{"XXX"},null);//XXX表示应用名称。
  10. if(c!=null&&c.getCount()>0){
  11. isInstallShortcut=true;
  12. }
  13. /*try{
  14. while(c.moveToNext()){
  15. Stringtmp="";
  16. tmp=c.getString(0);
  17. }
  18. }catch(Exceptione){
  19. }finally{
  20. c.close();
  21. }*/
  22. returnisInstallShortcut;
  23. }

要有权限:
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"/>
注意:2.2及其之后的版本不能用这个方法判断!(虽然在launcher.db数据库里还有favorites这个表)

如何让ListView中TextView的字体颜色跟随焦点的变化?
我们通常需要ListView中某一项选中时,他的字体颜色和原来的不一样。 如何设置字体的颜色呢? 在布局文件中TextColor一项来设置颜色,但是不是只设置一种颜色,而是在不同的条件下设置不同的颜色: 下面是个例子:
Xml代码 收藏代码
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <selectorxmlns:android="http://schemas.android.com/apk/res/android">
  3. <itemandroid:state_enabled="false"android:color="@color/orange"></item>
  4. <itemandroid:state_window_focused="false"android:color="@color/orange"></item>
  5. <itemandroid:state_pressed="true"android:color="@color/white"></item>
  6. <itemandroid:state_selected="true"android:color="@color/white"></item>
  7. <itemandroid:color="@color/orange"></item>
  8. </selector>
  9. 在获取焦点或者选中的情况下设置为白色,其他情况设置为橘黄色。



如何在android的一个应用中调用另外一个应用?
Java代码 收藏代码
  1. Intentintent=newIntent();
  2. //第一个参数另一个应用的包名,第二个是需要启动的类
  3. intent.setComponent(newComponentName("com.Ex03_03","com.Ex03_03.Ex03_03"));
  4. startActivity(intent);


如何遍历listView 的的单选框?
Java代码 收藏代码
  1. ListViewlistView=(ListView)findViewById(R.id.配置文件中ListView的ID);
  2. //全选遍历ListView的选项,每个选项就相当于布局配置文件中的RelativeLayout
  3. for(inti=0;i<listView.getChildCount();i++){
  4. Viewview=listView.getChildAt(i);
  5. CheckBoxcb=(CheckBox)view.findViewById(R.id.CheckBoxID);
  6. cb.setChecked(true);
  7. }


如何获取程序版本号?
Java代码 收藏代码
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <manifestxmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.yourcompany.yourapp"
  4. android:versionCode="109"
  5. android:versionName="0.1.6.109dev">
  6. ...
  7. </manifest>
  8. publicstaticintgetVersionCode(Contextcontext){
  9. PackageManagerpm=context.getPackageManager();
  10. try{
  11. PackageInfopi=pm.getPackageInfo(context.getPackageName(),0);
  12. returnpi.versionCode;
  13. }catch(NameNotFoundExceptionex){}
  14. return0;
  15. }


如何让Toast充满全屏?
Java代码 收藏代码
  1. Toastt=Toast.makeText(this,"Hello",Toast.LENGTH_SHORT);
  2. t.setGravity(Gravity.FILL_HORIZONTAL,0,0);


如何更高效简单的实现界面中的分隔线?
Java代码 收藏代码
  1. <View
  2. android:layout_width="fill_parent"
  3. android:layout_height="1px"
  4. android:background="?android:attr/listDivider"
  5. />


如何发起或删除另一个程序?
Java代码 收藏代码
  1. finalIntentintent=newIntent(Intent.ACTION_MAIN,null);
  2. intent.addCategory(Intent.CATEGORY_LAUNCHER);
  3. finalComponentNamecn=newComponentName("com.android.settings","com.android.settings.fuelgauge.PowerUsageSummary");
  4. intent.setComponent(cn);
  5. intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  6. startActivity(intent);

Java代码 收藏代码
  1. //ComponentName两个参数一个是包名一个是包下的主类
  2. Uriuri=Uri.fromParts("package",“YourPackagenamehere”,null);
  3. IntentdeleteIntent=newIntent(Intent.ACTION_DELETE,uri);
  4. startActivity(deleteIntent);


如何为TextView添加阴影?
values/styles
Xml代码 收藏代码
  1. <stylename="AudioFileInfoOverlayText">
  2. <itemname="android:paddingLeft">4px</item>
  3. <itemname="android:paddingBottom">4px</item>
  4. <itemname="android:textColor">#ffffffff</item>
  5. <itemname="android:textSize">12sp</item>
  6. <itemname="android:shadowColor">#ff00ff00</item>
  7. <itemname="android:shadowDx">5</item>
  8. <itemname="android:shadowDy">3</item>
  9. <itemname="android:shadowRadius">6</item>
  10. </style>

<TextView android:id="@+id/info"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@style/AudioFileInfoOverlayText"
android:text="aaaa"
android:gravity="center" />

如何监测是否静音?
Java代码 收藏代码
  1. AudioManageram=(AudioManager)getSystemService(Context.AUDIO_SERVICE);
  2. switch(am.getRingerMode()){
  3. caseAudioManager.RINGER_MODE_SILENT:
  4. Log.i("MyApp","Silentmode");
  5. break;
  6. caseAudioManager.RINGER_MODE_VIBRATE:
  7. Log.i("MyApp","Vibratemode");
  8. break;
  9. caseAudioManager.RINGER_MODE_NORMAL:
  10. Log.i("MyApp","Normalmode");
  11. break;
  12. }


如何设置控件的随机显示位置?
Java代码 收藏代码
  1. RelativeLayout.LayoutParamsparms=(RelativeLayout.LayoutParams)img.getLayoutParams();
  2. parms.leftMargin=(int)(Math.random()*320);
  3. parms.topMargin=(int)(Math.random()*480);
  4. img.setLayoutParams(parms);
  5. img.invalidate();


如何让软键盘显示/消失?
Java代码 收藏代码
  1. InputMethodManagerimm=(InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
  2. Viewview=getCurrentFocus();
  3. if(view!=null){
  4. //imm.showSoftInput(view,0);//显示软键盘
  5. imm.toggleSoftInput(0,InputMethodManager.HIDE_NOT_ALWAYS);
  6. //imm.hideSoftInputFromWindow(view.getWindowToken(),0);//隐藏软键盘//InputMethodManager.HIDE_NOT_ALWAYS);
  7. }


如何为Activity屏幕的标题栏添加图标?
Java代码 收藏代码
  1. @Override
  2. publicvoidonCreate(Bundleicicle){
  3. super.onCreate(icicle);
  4. Windowwin=getWindow();
  5. win.requestFeature(Window.FEATURE_LEFT_ICON);
  6. setContentView(R.layout.mylayout);
  7. win.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON,R.drawable.icon);
  8. }

要注意的是,win.setFeatureDrawableResource必须在setContentView之后,不然就没有效果。

如何让ListView自动滚动?
注意stackFromBottom以及transcriptMode这两个属性。类似Market客户端的低端不断滚动。
<ListView android:id="listCWJ"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stackFromBottom="true"
android:transcriptMode="alwaysScroll"
/>

如何设置桌面壁纸?
希望在你的程序中能设置桌面壁纸吗?很简单,首先我们需要取得设置壁纸的权限。和其它权限一样,只要在配置文件中加上以下配置信息即可。
<uses-permission android:name="android.permission.SET_WALLPAPER" />
然后在程序中调用如下代码即可设置桌面壁纸:
getApplicationContext().setWallpaper(bitmap)

如何在标题栏(titlebar)显示进度条?
Java代码 收藏代码
  1. protectedvoidonCreate(BundlesavedInstanceState){
  2. super.onCreate(savedInstanceState);
  3. requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);//先给Activity注册界面进度条功能
  4. setContentView(R.layout.main);
  5. setProgressBarIndeterminateVisibility(true);//在需要显示进度条的时候调用这个方法
  6. setProgressBarIndeterminateVisibility(false);//在不需要显示进度条的时候调用这个方法
  7. }


如何去掉activity顶部的gradient?
<style name="Theme.Foo" parent="android:style/Theme.Light">
<item name="android:windowContentOverlay">@null</item>
</style>
<activity android:name=".FooActivity"
android:theme="@style/Theme.Foo"> ...
http://wang-peng1.iteye.com/blog/680015

如何让ScrollView强制滑到底部?
scroll.fullScroll(View.FOCUS_DOWN) 就可以了

如何ViewFlipper去掉多余空间?
ViewFlipper flipper = (ViewFlipper)findViewById(R.id.flipper);
flipper.setMeasureAllChildren(false);

如何去掉tabhost横线?
Java代码 收藏代码
  1. 很简单简单的有时候是因为我们太浮躁
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. android:gravity="center_horizontal">
  7. <TabHost
  8. android:id="@android:id/tabhost"
  9. android:layout_width="fill_parent"
  10. android:layout_height="fill_parent"
  11. >
  12. ...
  13. ...
  14. ...
  15. </TabHost>
  16. </LinearLayout>
  17. 外面加一层LinearLayout


如何判断国家?
Java代码 收藏代码
  1. Stringlocale=context.getResources().getConfiguration().locale.getCountry();
  2. Stringlocale=context.getResources().getConfiguration().locale.getDisplayCountry();
  3. TelephonyManagertm=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
  4. StringcountryCode=tm.getSimCountryIso();


如何让屏幕保持一直亮?
Java代码 收藏代码
  1. @Override
  2. protectedvoidonCreate(Bundleicicle){
  3. super.onCreate(icicle);
  4. getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
  5. }

http://wang-peng1.iteye.com/blog/769561

如何检查sim卡状态?
Java代码 收藏代码
  1. TelephonyManagertelMgr=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
  2. intsimState=telMgr.getSimState();
  3. switch(simState){
  4. caseTelephonyManager.SIM_STATE_ABSENT:
  5. //dosomething
  6. break;
  7. caseTelephonyManager.SIM_STATE_NETWORK_LOCKED:
  8. //dosomething
  9. break;
  10. caseTelephonyManager.SIM_STATE_PIN_REQUIRED:
  11. //dosomething
  12. break;
  13. caseTelephonyManager.SIM_STATE_PUK_REQUIRED:
  14. //dosomething
  15. break;
  16. caseTelephonyManager.SIM_STATE_READY:
  17. //dosomething
  18. break;
  19. caseTelephonyManager.SIM_STATE_UNKNOWN:
  20. //dosomething
  21. break;
  22. }


如何从SMS获取联系人信息?
Java代码 收藏代码
  1. ContactItemgetContactByAddr(Contextcontext,finalSMSItemsms){
  2. UripersonUri=Uri.withAppendedPath(
  3. ContactsContract.PhoneLookup.CONTENT_FILTER_URI,sms.mAddress);
  4. Cursorcur=context.getContentResolver().query(personUri,
  5. newString[]{PhoneLookup.DISPLAY_NAME},
  6. null,null,null);
  7. if(cur.moveToFirst()){
  8. intnameIdx=cur.getColumnIndex(PhoneLookup.DISPLAY_NAME);
  9. ContactItemitem=newContactItem();
  10. item.mName=cur.getString(nameIdx);
  11. cur.close();
  12. returnitem;
  13. }
  14. returnnull;
  15. }


如何在使用gallery在flinging拖动时候不出现选择的情况?
这时候需要注意使用
gallery.setCallbackDuringFling(false)

TabHost组件,怎么调整tab的高度?
Java代码 收藏代码
  1. TabWidgettabWidget=mTabHost.getTabWidget();
  2. intcount=tabWidget.getChildCount();
  3. for(inti=0;i<count;i++){
  4. Viewview=tabWidget.getChildTabViewAt(i);//tabWidget.getChildAt(i);
  5. view.getLayoutParams().height=40;
  6. }


如何模拟SDcard?
看图:


应该能看明白。

如何自定义ListView行间的分割线?
在Android平台中系统控件提供了灵活的自定义选项,所有基于ListView或者说AbsListView实现的widget控件均可以通过下面的方法设置行间距的分割线,分割线可以自定义颜色、或图片。
在ListView中我们使用属性 android:divider="#FF0000" 定义分隔符为红色,当然这里值可以指向一个drawable图片对象,如果使用了图片可能高度大于系统默认的像素,可以自己设置高度比如6个像素 android:dividerHeight="6px" ,Android开发网提示当然在Java中ListView也有相关方法可以设置。

如何在EditText中显示隐藏Android输入法窗口?
细心的网友可能发现我们在使用EditText时,会自动的弹出输入法面板,这里我们提供多种方法可以不让程序默认升起IME窗口。
1.让EditText失去焦点,使用EditText的clearFocus方法
2. 强制隐藏Android输入法窗口,在IME类中我们通过
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 实例化输入法控制对象,通过hideSoftInputFromWindow来控制,其中第一个参数绑定的为需要隐藏输入法的EditText对象,比如imm.hideSoftInputFromWindow(etAndroid123.getWindowToken(), 0);

如何实现TextView多行本文滚动?
Android中我们为了实现文本的滚动可以在ScrollView中嵌入一个TextView,其实TextView自己也可以实现多行滚动的,毕竟ScrollView必须只能有一个直接的子类布局。只要在layout中简单设置几个属性就可以轻松实现
<TextView
android:id="@+id/tvCWJ"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical" <!--垂直滚动条 -->
android:singleLine="false" <!--实现多行 -->
android:maxLines="15" <!--最多不超过15行 -->
android:textColor="#FF0000"
/>
当然我们为了让TextView动起来,还需要用到TextView的setMovementMethod方法设置一个滚动实例,代码如下
TextView tvAndroid123 = (TextView)findViewById(R.id.tvCWJ);
tvAndroid123.setMovementMethod(ScrollingMovementMethod.getInstance());

如何对View截屏?
对于自己的View实现一些绘图或子类化的技术时可以不用系统级这样的方法,我们可以通过
view.setDrawingCacheEnabled(true); //其中View是你需要截图的的View
Bitmap bm = view.getDrawingCache();

如何区别onRetainNonConfigurationInstance和getLastNonConfigurationInstance?
很多网友可能知道Android横竖屏切换时会触发onSaveInstanceState,而还原时会产生onRestoreInstanceState,但是Android的Activity类还有一个方法名为onRetainNonConfigurationInstance和getLastNonConfigurationInstance这两个方法。
我们可以通过 onRetainNonConfigurationInstance 代替 onSaveInstanceState,比如距离2
@Override
public Object onRetainNonConfigurationInstance()
{
//这里需要保存的内容,在切换时不是bundle了,我们可以直接通过Object来代替
return obj;
}

在恢复窗口时,我们可以不使用 onRestoreInstanceState,而代替的是 getLastNonConfigurationInstance 方法。我们可以直接在onCreate中使用,比如
Object obj = getLastNonConfigurationInstance(); 最终obj的内容就是上次切换时的内容。
这里Android123提醒大家,每次Activity横竖屏切换时onCreate方法都会被触发。

如何区别AsyncTask和Thread+Handler?
很多网友可能发现Android平台很多应用使用的都是AsyncTask,而并非Thread和Handler去更新UI,这里Android123给大家说下他们到底有什么区别,我们平时应该使用哪种解决方案。从Android 1.5开始系统将AsyncTask引入到android.os包中,过去在很早1.1和1.0 SDK时其实官方将其命名为UserTask,其内部是JDK 1.5开始新增的concurrent库,做过J2EE的网友可能明白并发库效率和强大性,比Java原始的Thread更灵活和强大,但对于轻量级的使用更为占用系统资源。Thread是Java早期为实现多线程而设计的,比较简单不支持concurrent中很多特性在同步和线程池类中需要自己去实现很多的东西,对于分布式应用来说更需要自己写调度代码,而为了Android UI的刷新Google引入了Handler和Looper机制,它们均基于消息实现,有事可能消息队列阻塞或其他原因无法准确的使用。

Android开发网推荐大家使用AsyncTask代替Thread+Handler的方式,不仅调用上更为简单,经过实测更可靠一些,Google在Browser中大量使用了异步任务作为处理耗时的I/O操作,比如下载文件、读写数据库等等,它们在本质上都离不开消息,但是AsyncTask相比Thread加Handler更为可靠,更易于维护,但AsyncTask缺点也是有的比如一旦线程开启即dobackground方法执行后无法给线程发送消息,仅能通过预先设置好的标记来控制逻辑,当然可以通过线程的挂起等待标志位的改变来通讯,对于某些应用Thread和Handler以及Looper可能更灵活。

如何使多个Drawable叠加(合成图片)?
大家可能知道Bitmap的叠加处理在Android平台中可以通过Canvas一层一层的画就行了,而Drawable中如何处理呢? 除了使用BitmapDrawable的getBitmap方法将Drawable转换为Bitmap外,今天Android123给大家说下好用简单的LayerDrawable类,LayerDrawable顾名思义就是层图形对象。下面直接用一个简单的代码表示:
Java代码 收藏代码
  1. Bitmapbm=BitmapFactory.decodeResource(getResources(),R.drawable.cwj);
  2. Drawable[]array=newDrawable[3];
  3. array[0]=newPaintDrawable(Color.BLACK);//黑色
  4. array[1]=newPaintDrawable(Color.WHITE);//白色
  5. array[2]=newBitmapDrawable(bm);//位图资源
  6. LayerDrawableld=newLayerDrawable(array);//参数为上面的Drawable数组
  7. ld.setLayerInset(1,1,1,1,1);//第一个参数1代表数组的第二个元素,为白色
  8. ld.setLayerInset(2,2,2,2,2);//第一个参数2代表数组的第三个元素,为位图资源
  9. mImageView.setImageDrawable(ld);

上面的方法中LayerDrawable是关键,Android开发网提示setLayerInset方法原型为public void setLayerInset (int index, int l, int t, int r, int b) 其中第一个参数为层的索引号,后面的四个参数分别为left、top、right和bottom。对于简单的图片合成我们可以将第一和第二层的PaintDrawable换成BitmapDrawable即可实现简单的图片合成。
分享到:
评论

相关推荐

    基于Android的记录点滴生活App设计与实现.pdf

    "基于Android的记录点滴生活App设计与实现" 本文主要介绍了基于Android的记录点滴生活App的设计与实现,旨在帮助用户提高时间利用效率、满足用户日常社交、记录用户生活轨迹。该App的设计主要涉及到应用背景、实现...

    基于Android Studio开发的安卓的记事本app

    在移动设备上,记事本应用是一种常见的工具,方便用户随时随地记录生活点滴或工作备忘。本文将深入探讨一个基于Android Studio开发的安卓记事本App,它包含了登录、注册、记事本列表、添加记事、修改记事等功能,...

    基于Android,AndroidStudio开发的便签软件APP

    这个APP的设计灵感来源于锤子便签,它提供了一个简洁而实用的界面,供用户记录生活中的点滴、工作上的待办事项或是任何需要记住的信息。源码的结构清晰,非常适合那些正在寻找毕业设计项目的同学,或者对Android应用...

    安卓大作业,Android Studio做的记事本

    在这个大作业中,我们看到的是一个基于Android Studio开发的简单记事本应用,它允许用户记录日常生活中的点滴,并进行保存。下面我们将深入探讨这个应用涉及到的关键知识点。 1. **Android应用基础**: - **...

    点滴音乐播放器

    总的来说,"点滴音乐播放器"是一款集本地音乐播放、播放模式选择和歌词同步显示于一体的Android应用,其背后的技术实现涵盖了多媒体处理、文件操作、用户界面设计等多个方面,充分体现了Android开发的多样性和复杂性...

    Android应用源码时光日志本一句话记录每一天

    【Android应用源码时光日志本】是一款专为Android平台设计的应用程序,旨在帮助用户用一句话轻松记录生活中的点滴时光。这款应用的核心功能是让用户每天用简洁的语言记录下自己的所思所感,形成一个时间线式的个人...

    Android记事本的实现

    在Android平台上,开发一个记事本应用是一项常见的实践任务,它可以帮助用户记录日常生活中的点滴信息。这个"Android记事本的实现"项目是基于Android SDK的,利用了平台内置的SQLite数据库来存储用户的数据。接下来...

    饭否Android客户端 源码

    其Android客户端为用户提供了一个便捷的途径,通过手机随时随地分享生活点滴,关注他人动态。今天,我们将深入探讨“饭否Android客户端”的源码,以此来揭示其背后的开发原理和技术栈。 首先,源码是软件开发的核心...

    Android旅游助手app

    2. **旅游笔记**:用户可以在此记录旅行中的点滴,无论是行程规划、景点介绍还是体验感受,都可以随时保存,便于日后回忆或分享。 3. **实时天气**:集成天气API,为用户提供准确的当地及目的地天气预报,包括温度...

    android笔记本

    这款简单的笔记本App可能是为了方便用户记录日常生活、工作或学习中的点滴信息。 描述中提到“用android写的一个简单的笔记本app”,这意味着这个App可能具有基本的记事功能,如文本编辑、保存、查看等。开发者可能...

    android随手记

    【标题】:“Android随手记”是一款专为Android平台设计的笔记应用,旨在提供便捷的记录功能,让用户随时随地捕捉生活中的点滴。源代码的开放性使得它成为初学者学习Android开发的良好资源。 【描述】:该项目提供...

    Android便签的源代码

    在Android平台上,开发一款便签应用是常见的任务,它能够帮助用户快速记录日常生活中的点滴信息。本源代码分享的是一个Android便签应用的实现,旨在为开发者提供学习和参考的资源。下面我们将深入探讨Android便签...

    Android App_云随笔课程设计

    在开发“Android App_云随笔课程设计”项目时,我们面临的是构建一个移动应用程序,旨在帮助用户便捷地记录他们的日常生活、旅行体验、心情点滴以及学习笔记等。这个应用程序的关键特性在于其同步功能,它将用户的...

    android课程设计

    这个设计的目标是创建一个简单易用、功能直观的便签应用,使用户能够随时随地记录生活中的点滴想法或待办事项。 在Android平台上开发便签应用,你需要掌握以下几个核心知识点: 1. **环境搭建**:首先,你需要安装...

    Android随手记

    【Android随手记】是一款基于Android平台的简单文本记录应用,旨在提供便捷的日常记事功能。作为移动开发课程的小作业,这个项目展示了开发者...同时,这也是一款实用的应用,能够帮助用户随时随地记录生活中的点滴。

    android 日记本

    在Android平台上,开发一款日记本应用是一个常见的实践项目,它能帮助用户记录日常生活中的点滴,同时为初学者提供了一个理解Android应用开发的良好起点。这款"android 日记本"源代码正是这样一个实例,它包含了基本...

    基于Android的儿童成长APP的设计与实现

    4、家庭分享模块,分享宝宝成长点滴,每分享一次奖励5朵小红花。 5、奖励兑换模块。 ———————————————— 版权声明:本文为CSDN博主「Android毕业设计源码」的原创文章,遵循CC 4.0 BY-SA版权协议,...

    Android私密记事本

    "Android私密记事本"是一个典型的Android应用程序,它利用了Android平台的核心组件——四大组件,为用户提供了一个安全、便捷的记录生活点滴的工具。本文将深入探讨这一应用程序背后的技术原理,主要围绕四大组件...

    Android日记本(上线版)

    《Android日记本(上线版)》是一款专为Android平台设计的日记应用,旨在提供便捷、个性化的记录方式,让用户能够随时随地记录生活中的点滴。这款应用的第二版已经正式上线,并在指定网址...

    Android便签作品

    在Android平台上,开发一款便签应用是一个常见的项目,它能够帮助用户快速记录日常生活中的点滴信息。这个名为"Android便签作品"的项目包含了基础的便签功能和安全性的设置,如密码保护,使得用户的数据更加私密。接...

Global site tag (gtag.js) - Google Analytics