当前位置: 编程技术>移动开发
本页文章导读:
▪手机挥动检测 手机晃动检测
参考 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的动画过程是怎样的处理机制?
最新技术文章: