简单来说,
android:gravity这个属性是对该view里面的内容的限定.比如一个button 上面的text,另外,需要强调的是linearlayout等也都是view,所以要设置linearlayout里控件的对齐方式也可以在linearlayout中用android:gravity这个属性;
android:layout_gravity是用来设置该view自身相对与其父view 的位置.比如一个button 在linearlayout里,你想把该button放在靠左或者靠右等位置就可以通过设置button的这个属性来实现。
总得来说,android:gravity这个属性是设置她的孩子的对其方式;android:layout_gravity是用来设置自己在父亲里的对齐方式。
下面来看一个例子就更加明白了:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="right" ><!--此行设置孩子组件的对齐方式--> <Button android:id="@+id/buttonRadioGroup" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="radioGroup" android:layout_gravity="right" /><!--此行与第六行的作用相同,但是优先级高于 第六行(即把此行的right改为center,组件将居中!)--> <Button android:id="@+id/buttonSpinner" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="spinner" android:gravity="center" /><!--此行设置button的孩子(显示文本)对齐方式--> </LinearLayout>
一:保存手势到文件中:
private final File mStoreFile = new File(Environment.getExternalStorageDirectory(), "gestures");//在sdk目录生成一个gestures文件 GestureLibrary library = GestureLibraries.fromFile(mStoreFile); GestureOverlayView overlay=(GestureOverlayView)findViewById(R.id.gestures_overlay); overlay.addOnGestureListener(new GestureOverlayView.OnGestureListener() { @Override public void onGestureStarted(GestureOverlayView overlay, MotionEvent event) { } @Override public void onGestureEnded(GestureOverlayView overlay, MotionEvent event) { Gesture gesture = overlay.getGesture(); library.addGesture("给手势取一个名字吧", mGesture); library.save(); if (mGesture.getLength() < LENGTH_THRESHOLD) { overlay.clear(false); } } @Override public void onGestureCancelled(GestureOverlayView overlay, MotionEvent event) { } @Override public void onGesture(GestureOverlayView overlay, MotionEvent event) { } });
二:根据文件中保存的手势执行对应的操作
private GestureLibrary mLibrary = GestureLibraries.fromRawResource(context, R.raw.gestures); mLibrary.load(); overlay.addOnGesturePerformedListener(new OnGesturePerformedListener() { @Override public void onGesturePerformed(GestureOverlayView overlay,Gesture gesture) { ArrayList<Prediction> predictions = mLibrary.recognize(gesture); if (predictions.size() > 0) { Prediction prediction = predictions.get(0); if(prediction.name.equals("close")){ //执行关闭操作 }else if(prediction.name.equals("come on")){ //执行come on 操作 }else if(prediction.name.equals("yes")){ //执行yes 操作 } } } });
三:手势转图片
Bitmap bitmap = gesture.toBitmap(width, height, inset, color);
在去实习的时候面试考试的几道java题总结:
1、j=j++;//在这个过程中j的值是不会发生变化的
j+=1;//在这个过程中j的值会发生变化,会增一。
2、Math中除了有sin cos等方法外,还有一个static 常量,PI。
3、java中byte类型
int占4个字节,byte是1个字节,每个字节8位。
所以2进制的话,int最多可以表示正负一共2的32次方个数,byte则是2的8次方。
4、用最简单的方法实现2乘以16
2<<4
5、抽象类和接口
区别一、
接口是一种和类相似的结构,只包含常量和抽象方法,而且抽象方法只能是public的。
抽象类和常规类很像,但是不能用new操作符创建它的实例。抽象类中可以有普通成员方法和普通成员变量。
区别二、
接口需要实现,要用implements;抽象类需要继承,要用extends。
一个类可以实现多个接口,而一个类只能继承一个抽象类
接口着重强调特定功能的实现,抽象类强调所属关系
接口在许多方面与抽象类相似,但是它的目的是指明多个对象的共同行为
6、wait和sleep的区别
虽然wait 和sleep都是用来进行线程控制,但是它们还是有很大的区别
(1)、sleep()不释放同步锁,wait()释放同步锁
(2)、sleep()和wait()的唤醒方法:
sleep()可以用时间指定来自动唤醒,如果时间不到可以用interrupt()强行打断来唤醒;
wait()可以用notify()方法来直接唤醒。
上面是我的总结,下面是在别人的文章中摘抄的一些:
sleep()、suspend()、resume()方法不推荐使用,推荐使用wait()、notify()、notifyAll()。
1.sleep()方法介绍
sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非
(a)醒来的线程具有更高的优先级。
(b)正在运行的线程因为其它原因而阻塞。
2.wait()方法介绍
wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。 当调用wait()后,线程会释放掉它所占有的锁标志,从而使线程所在对象中的其它synchronized数据可被别的线程使用。
3.waite()和notify()的区别
waite()和notify()因为会对对象的“锁标志”进行操作,所以它们必须在synchronized函数或synchronized block中进行调用。如果在non-synchronized函数或non-synchronized block中进行调用,虽然能编译通过,但在运行时会发生IllegalMonitorStateException的异常。