我有一些值存储在Long[]中,这是用于安卓的振动方法,
int dot = 100;
int dash = 220;
int short_gap = 200;
int medium_gap = 700;
vibIndicator = (TextView)findViewById(R.id.TextView01);
vibPattern = new long[] {0, dash, short_gap, dot, short_gap, dot, short_gap, dot, medium_gap};
for (int i = 0; i < vibPattern.length; i++)
{
if (vibPattern[i] == 100)
{
vibIndicator.setBackgroundResource(R.color.White);
}
else if(vibPattern[i] == 220)
{
vibIndicator.setBackgroundResource(R.color.Red);
}
try
{
Thread.sleep(vibPattern[i]);
}
catch (InterruptedException e)
{
//
}
}
Vibrator vibrator;
vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
vibrator.vibrate(vibPattern, -1);
当文本视图变成短划线或圆点时,我需要相应地更改文本视图的背景颜色
应用程序会挂起一段时间(我假设它处于睡眠状态),并且在恢复时只显示最后的背景颜色
发布于 2011-03-13 16:45:15
嗯,我想学习如何使用可控震源,并快速编写了这个程序,它可以做你想做的事情。必须在AndroidManifest中设置可控震源权限:
<uses-permission android:name="android.permission.VIBRATE"/>
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.os.Vibrator;
import android.widget.TextView;
import android.widget.Toast;
public class Launch extends Activity {
int dot = 100;
int dash = 220;
int short_gap = 200;
int medium_gap = 700;
int i = 0;
long[] vibPattern = new long[] {0, dash, short_gap, dot, short_gap, dot, short_gap, dot, medium_gap};
TextView vibIndicator;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
vibIndicator = (TextView)findViewById(R.id.textView1);
simpleTimer();
}
public void simpleTimer(){
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (vibPattern[i] == dot){
vibIndicator.setBackgroundColor(Color.WHITE);
vibratePhone(vibPattern[i]);
}else if(vibPattern[i] == dash){
vibIndicator.setBackgroundColor(Color.RED);
vibratePhone(vibPattern[i]);
}else{
vibIndicator.setBackgroundColor(Color.TRANSPARENT);
}
i++;
if (i< vibPattern.length){
simpleTimer();
}else{
Toast.makeText(Launch.this, "Finished", Toast.LENGTH_LONG).show();
}
}
}, vibPattern[i]);
}
public void vibratePhone(long timeLength){
Vibrator vibrator;
vibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
try{
vibrator.vibrate(timeLength);
}catch(Exception e){
}
}
}
发布于 2011-03-13 15:43:29
Thread.sleep()
不能保证它会休眠多长时间,你需要自己编程,比如:
private void sleep(long ms) {
long start = System.currentTimeMillis();
while ((System.currentTimeMillis() - start) < ms) {
try {
Thread.sleep(ms - (System.currentTimeMillis() - start));
} catch (InterruptedException e) {
}
}
}
发布于 2011-03-13 16:47:44
在开始振动模式之前,您要迭代所有的GUI更新。因此,只有在做振动模式时,它才会显示最后的状态。
我以前没有使用过Android,所以我假设vibrate()
会阻塞,直到模式完成。如果您仍然希望使用该方法,则需要异步执行此操作,以便更新循环可以并行运行。另一种选择是以更大的粒度控制振动器,而不是使用模式方法。通过这种方式,在每次迭代中,您可以决定是否需要打开或关闭可控震源,以及这对GUI更新意味着什么。
https://stackoverflow.com/questions/5290347
复制