当前位置: 编程技术>移动开发
本页文章导读:
▪手机挥动检测 手机晃动检测
参考 http://blog.csdn.net/zhengzhiren/article/details/5930451
package zhengzhiren.android.hardware;
import java.util.ArrayList;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEv.........
▪ 网格格局 TableLayout 网格布局 TableLayout
<?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="f.........
▪ 创设可拉伸图片 创建可拉伸图片
- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight这个函数是UIImage的一个实例函数,它的功能是创建一个内容可拉伸,而边角不拉伸的图片,.........
[1]手机挥动检测
来源: 互联网 发布时间: 2014-02-18
手机晃动检测
参考 http://blog.csdn.net/zhengzhiren/article/details/5930451
package zhengzhiren.android.hardware;
import java.util.ArrayList;
import android.content.Context;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.util.FloatMath;
/**
* 用于检测手机摇晃
*
* @author 郑智仁
* @see <a href="http://blog.csdn.net/zhengzhiren" mce_href="http://blog.csdn.net/zhengzhiren">Blog</a>
*/
public class ShakeDetector implements SensorEventListener {
/**
* 检测的时间间隔
*/
static final int UPDATE_INTERVAL = 100;
/**
* 上一次检测的时间
*/
long mLastUpdateTime;
/**
* 上一次检测时,加速度在x、y、z方向上的分量,用于和当前加速度比较求差。
*/
float mLastX, mLastY, mLastZ;
Context mContext;
SensorManager mSensorManager;
ArrayList<OnShakeListener> mListeners;
/**
* 摇晃检测阈值,决定了对摇晃的敏感程度,越小越敏感。
*/
public int shakeThreshold = 5000;
public ShakeDetector(Context context) {
mContext = context;
mSensorManager = (SensorManager) context
.getSystemService(Context.SENSOR_SERVICE);
mListeners = new ArrayList<OnShakeListener>();
}
/**
* 当摇晃事件发生时,接收通知
*/
public interface OnShakeListener {
/**
* 当手机摇晃时被调用
*/
void onShake();
}
/**
* 注册OnShakeListener,当摇晃时接收通知
*
* @param listener
*/
public void registerOnShakeListener(OnShakeListener listener) {
if (mListeners.contains(listener))
return;
mListeners.add(listener);
}
/**
* 移除已经注册的OnShakeListener
*
* @param listener
*/
public void unregisterOnShakeListener(OnShakeListener listener) {
mListeners.remove(listener);
}
/**
* 启动摇晃检测
*/
public void start() {
if (mSensorManager == null) {
throw new UnsupportedOperationException();
}
Sensor sensor = mSensorManager
.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
if (sensor == null) {
throw new UnsupportedOperationException();
}
boolean success = mSensorManager.registerListener(this, sensor,
SensorManager.SENSOR_DELAY_GAME);
if (!success) {
throw new UnsupportedOperationException();
}
}
/**
* 停止摇晃检测
*/
public void stop() {
if (mSensorManager != null)
mSensorManager.unregisterListener(this);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
@Override
public void onSensorChanged(SensorEvent event) {
long currentTime = System.currentTimeMillis();
long diffTime = currentTime - mLastUpdateTime;
if (diffTime < UPDATE_INTERVAL)
return;
mLastUpdateTime = currentTime;
float x = event.values[0];
float y = event.values[1];
float z = event.values[2];
float deltaX = x - mLastX;
float deltaY = y - mLastY;
float deltaZ = z - mLastZ;
mLastX = x;
mLastY = y;
mLastZ = z;
float delta = FloatMath.sqrt(deltaX * deltaX + deltaY * deltaY + deltaZ
* deltaZ)
/ diffTime * 10000;
if (delta > shakeThreshold) { // 当加速度的差值大于指定的阈值,认为这是一个摇晃
this.notifyListeners();
}
}
/**
* 当摇晃事件发生时,通知所有的listener
*/
private void notifyListeners() {
for (OnShakeListener listener : mListeners) {
listener.onShake();
}
}
}
[2] 网格格局 TableLayout
来源: 互联网 发布时间: 2014-02-18
网格布局 TableLayout
<?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"
>
<TableLayout
android:id="@+id/TableLayout01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:collapseColumns="2"
android:stretchColumns="1"
>
<TableRow
android:id="@+id/TableRow01"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:text="用户名称"
android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></TextView>
<EditText
android:text="admin"
android:id="@+id/EditText01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></EditText>
</TableRow>
<TableRow
android:id="@+id/TableRow01"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:text="用户密码"
android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></TextView>
<EditText
android:text="123"
android:id="@+id/EditText01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:password="true"
></EditText>
</TableRow>
<TableRow
android:id="@+id/TableRow01"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button
android:text="注册"
android:id="@+id/register"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></Button>
<Button
android:text="取消"
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></Button>
</TableRow>
</TableLayout>
</LinearLayout>
[3] 创设可拉伸图片
来源: 互联网 发布时间: 2014-02-18
创建可拉伸图片
- (UIImage *)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight:(NSInteger)topCapHeight
这个函数是UIImage的一个实例函数,它的功能是创建一个内容可拉伸,而边角不拉伸的图片,需要两个参数,第一个是不拉伸区域和左边框的宽度,第二个参数是不拉伸区域和上边框的宽度。
第一次用这个函数的时候一直搞不懂为什么只要两个参数就行,至少应该指定左上角和右下角,总共四个参数啊。后来读读文档才明白,只需要两个参数就行了。
参数的意义是,如果参数指定10,5。那么,图片左边10个像素,上边5个像素。不会被拉伸,x坐标为11和一个像素会被横向复制,y坐标为6的一个像素会被纵向复制。注意:只是对一个像素进行复制到一定宽度。
附:两个聊天用的汽泡,与参数值。
15,13
21,13
UIImage *stetchLeftTrack = [[UIImage imageNamed:@"orangeslide.png"]
stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0];
1 楼
liuxco
2011-10-14
疑问:如果采用动画过度拉伸一个UIImage,四个角得情况是怎样?
情况1:四个角遵照stretchableImageWithLeftCapWidth方法的标准,保持不变中间拉伸。
情况2:四个角采取普通UIImage拉伸方式,直到拉伸到stretchableImageWithLeftCapWidth方法设定的大小,然后切换到四角不变的状态。(这样就会产生视觉跳跃)
引申问题:ios的动画过程是怎样的处理机制?
情况1:四个角遵照stretchableImageWithLeftCapWidth方法的标准,保持不变中间拉伸。
情况2:四个角采取普通UIImage拉伸方式,直到拉伸到stretchableImageWithLeftCapWidth方法设定的大小,然后切换到四角不变的状态。(这样就会产生视觉跳跃)
引申问题:ios的动画过程是怎样的处理机制?
最新技术文章: