1) activity中弹出dialog会不会出发onPause()事件?
如果是单纯的Dialog跳出:
onCreate1()-onStart1()-onResume1(),
因为没有涉及到activity之间的交互,所以不会引起生命周期的变化。
如果是个theme为Dialog的activity2,分成有没有把屏幕遮住。
如果还能看见activity1: onCreate1()-onStart1()-onResume1()-onPause1()-onCreate2()-onStart2()-onResume2()
如果全部遮住了: onCreate1()-onStart1()-onResume1()-onPause1()-onCreate2()-onStart2()-onResume2()-onStop1()
2) 两个application怎么才能share一个uid
3) 应用的入口可以是一个service么?
4) Service run in the main thread of the application process,所以不阻塞主线程???神马意思
5) onNewIntent() 调用时机
6) activity可以利用finishActivity()关掉另外一个activity么?
7) manifest里面<activity>中有android:icon和android:label?是launch有还是每个都有,用做桌面widget么?
8) DroidDraw,可视化UI,有空try一下
9) Android autoLink
TextView中的属性,自动识别网址和电话的
10)android自带颜色:Color.TRANSPARENT
11) view.setOnClickListener( void onClick(View v ))...其中的v是指父类的view么?
12) AbsoluteLayout 有空try
好像不建议使用
13) NumberFormat???
14) SVN提交时,classpath不应该提交吧。如果有人提交被冲突了怎么办?
一般出错就是lib的路径不对,修改一下即可
15) 刚在看《大话企业级android》
R.java 文件除了有自动标识资源的“索引”功能之外,还有另一个主要的功能,当res目录中的某个资源在应用中没有被使用到,在该应用被编辑的时候系统就不会把对应的资源编译到该应用的APK包中,这样可以节省android手机的资源。
这个胡扯的吧。。。
16) android.view.View.setEnabled(boolean enabled)
这个有什么用?
17)invalidate()和postInvalidate() 的区别及使用
接上一篇在SurfaceView上拖动一张小图片
什么叫拖动飞机呢?且看
怎么样?厉害吧,飞机都能拖动。:P
public class AppView extends SurfaceView implements SurfaceHolder.Callback,Runnable,OnTouchListener{ private static final String tag="AppView"; private Context context; private SurfaceHolder holder; private Bitmap player; private int playerWidth,playerHeight; private int indexX,indexY;//图片的索引帧 private int x,y; private Paint paint; private boolean running=true; private Rect view;//游戏视窗 public AppView(Context context) { super(context); // TODO Auto-generated constructor stub this.context=context; holder = this.getHolder();//获取holder holder.addCallback(this); this.setOnTouchListener(this); } public AppView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub this.context=context; holder = this.getHolder();//获取holder holder.addCallback(this); this.setOnTouchListener(this); } private void init(){ view=new Rect(this.getLeft(),this.getTop(),this.getRight(),this.getBottom()); player =getImage(context,R.drawable.player); playerWidth=player.getWidth()/3;//有3帧 playerHeight=player.getHeight(); indexX=1;//初始化帧索引 indexY=0; x=(view.width()-playerWidth)>>1;//初始化角色位置 y=(view.height()-playerHeight)>>1; rect=new Rect(x,y,x+playerWidth,y+playerHeight);//图片的可拖动rect paint=new Paint(); } private void close(){ } private void logic(){ } private void draw(){ Canvas canvas = holder.lockCanvas();//获取画布 canvas.drawColor(Color.BLACK); canvas.save(); canvas.clipRect(rect); canvas.drawBitmap(player, rect.left-playerWidth*indexX,rect.top-playerHeight*indexY,null); // canvas.clipRect(screen); canvas.restore(); holder.unlockCanvasAndPost(canvas);// 解锁画布,提交画好的图像 } @Override public void surfaceCreated(SurfaceHolder holder) { // TODO Auto-generated method stub Log.i(tag, "=================surfaceCreated======================"); init(); running=true; new Thread(this).start(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { // TODO Auto-generated method stub Log.i(tag, "=================surfaceDestroyed======================"); running=false; close(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { // TODO Auto-generated method stub Log.i(tag, "=================surfaceChanged======================"); } @Override public void run() { // TODO Auto-generated method stub int SLEEP_TIME=100; while (running) { long start=System.currentTimeMillis(); logic(); draw(); long end=System.currentTimeMillis(); if(end-start<SLEEP_TIME){ try { Thread.sleep(SLEEP_TIME-(end-start)); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } // Region region=new Region(); private Point point=new Point();//点击点 private Rect rect;//图片的可拖动rect private boolean canDrag=false;//判断是否点击在图片上,否则拖动无效 private int offsetX=0,offsetY=0;//点击点离图片左上角的距离 private VelocityTracker tracker = null;//速度跟踪器,用于判断飞机偏左还是偏右移动 @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub switch (event.getAction()) { case MotionEvent.ACTION_DOWN: point.x=(int)event.getX(); point.y=(int)event.getY(); if(rect.contains(point.x, point.y)){ canDrag=true; offsetX=point.x-rect.left; offsetY=point.y-rect.top; if(tracker == null){ tracker = VelocityTracker.obtain(); }else{ tracker.clear(); } tracker.addMovement(event); } break; case MotionEvent.ACTION_MOVE: if(canDrag){ rect.left=(int)event.getX()-offsetX; rect.top=(int)event.getY()-offsetY; rect.right=rect.left+playerWidth; rect.bottom=rect.top+playerHeight; tracker.addMovement(event); tracker.computeCurrentVelocity(1000); float XVelocity=tracker.getXVelocity(); // Log.i(tag, "XVelocity="+XVelocity); if(XVelocity<-100){//偏左 indexX=0; indexY=0; }else if(XVelocity>100){//偏右 indexX=2; indexY=0; }else{ indexX=1; indexY=0; } if (rect.left < 0) { rect.left = 0; rect.right = rect.left+playerWidth; indexX=1; indexY=0; } if (rect.right > getMeasuredWidth()) { rect.right = getMeasuredWidth(); rect.left = rect.right-playerWidth; indexX=1; indexY=0; } if (rect.top < 0) { rect.top = 0; rect.bottom = rect.top+playerHeight; } if (rect.bottom > getMeasuredHeight()) { rect.bottom = getMeasuredHeight(); rect.top = rect.bottom-playerHeight; } } break; case MotionEvent.ACTION_UP: // case MotionEvent.ACTION_CANCEL: if(canDrag){ tracker.recycle(); canDrag=false; indexX=1; indexY=0; } break; default: break; } return true; } //**************************************************************************** public static final Bitmap getImage(Context context, int imageId) { return BitmapFactory.decodeResource(context.getResources(),imageId); } }
布局随便弄一个:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AppView view=new AppView(this);
// setContentView(view);
setContentView(R.layout.main);
}
图片文件:
一个游戏角色在屏幕行走的demo
http://blog.csdn.net/xiaominghimi/article/details/6090631
文章来源:http://developer.android.com/guide/topics/search/search-dialog.html
一、前言:
Android为程序的搜索功能提供了统一的搜索接口,search dialog和search widget。
search dialog只能为于activity窗口的上方,search widget可以位于任何位置。
search dialog和search widget都会向我们的searchable activity发送消息(主要是搜索关键字)。
通过这种方式,可以为任何activity加入search dialog和search widget,系统可以启动合适的activity来处理搜索并显示结果。
search dialog和search widget的其他属性如下:
A:声音搜索。
B:根据最近的搜索结果,给出搜索建议。
C:根据我们程序的实际搜索结果,给出搜索建议。
注1:search widget在 Android 3.0或更高版本才可用
注2:searchable activity才是真正执行搜索的。
二、基本知识
在开始实现搜索功能之前,请决定使用search dialog,还是search widget.
他们的搜索功能特性都有一样,但是他们还有微小区别。
A,search dialog是一个被系统控制的UI组件。但他被用户激活的时候,它总是出现在activity的上方,如图一所示。
B,Android系统负责处理search dialog上所有的事件,当用户提交了查询,系统会把这个查询请求传输到我们的searchable activity,
让searchable activity在处理真正的查询。当用户在输入的时候,search dialog还能提供搜索建议。
C,search widget是SearchView的一个实例,你可以把它放在你的布局的任何地方。
D,默认的,search widget和一个标准的EditText widget一样,不能做任何事情。
但是你可以配置它,让android系统处理所有的按键事件,把查询请求传输给合适的activity,可以配置它让它像search dialog一样提供search suggestions。
E,search widget在 Android 3.0或更高版本才可用. search dialog没有此项限制
提示: 如果你想自己在search widget处理所有的用户输入,请使用各种回调函数和监听接口,具体参照http://developer.android.com/reference/android/widget/SearchView.html 。
当用户在search dialog或search widget中执行一个搜索的时候,系统会创建一个Intent,并把查询关键字保存在里面,
然后启动我们在AndroidManifest.xml中声明好的searchable activity,并把Intent传送给它。
实现一个可以搜索的程序,主要需要以下几个部份:
(1),search dialog or widget的配置文件。
配置一个XML文件用于配置search dialog 或widget的设置。对于search dialog,该配置文件的名字一般约定为searchable.xml
(2),searchable activity。
searchable activity用于接收搜索关键字,并进行数据搜索和显示搜索结果。
(3),搜索条。search dialog 或search widget
* The search dialog
默认的,search dialog是隐藏。当我们按下了SEARCH键或在程序中调用onSearchRequested(),它将出现在屏幕的上方.
* a SearchView widget
使用search widget的时候,你可以把该搜索条放在我们activity的任何地方。
Instead of putting it in your activity layout, however, it's usually more convenient for users as an action view in the Action Bar.
三、创建配置文件searchable.xml
配置文件说明了search dialog 或widget的一些属性。包括UI,以及suggestions 和voice search behave的一些属性。
该文件一般约定为searchable.xml并位于res/xml/目录下。
searchable.xml必须以<searchable> element 作为根节点,且至少定义一个属性。
比如,示例1:
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:label="@string/app_label"
android:hint="@string/search_hint" >
</searchable>
android:label是唯一必须定义的属性。它指向一个字符串,它应该是应用程序的名字。
实际上该label也只有在search suggestions for Quick Search Box可用时才可见。
这时该label在系统设置的Searchable项的列表中可见。
虽然android:hint属性不是必须,但是还是推介总是定义它。它是search box用户输入前输入框中的提示语。
<searchable> 还有其他的一些属性。如果不需要search suggestions 和voice search的话,大多数的属性是不需要的。
关于searchable.xml更多内容请参考:http://developer.android.com/guide/topics/search/searchable-config.html