【发布时间】:2014-03-31 07:44:32
【问题描述】:
有没有一种可能的方法可以在 Google Glass 上实现一个列表,该列表的外观和功能(通过头部移动滚动)类似于 Glass 主屏幕上的列表。
我提到的列表在 Glass 上是这样的:
我找不到任何有关这方面的文档,因此我们将不胜感激。
【问题讨论】:
标签: android list google-glass
有没有一种可能的方法可以在 Google Glass 上实现一个列表,该列表的外观和功能(通过头部移动滚动)类似于 Glass 主屏幕上的列表。
我提到的列表在 Glass 上是这样的:
我找不到任何有关这方面的文档,因此我们将不胜感激。
【问题讨论】:
标签: android list google-glass
这是一个ListView,它对头部运动做出反应,还有一个ScrollView。
【讨论】:
这是我自己的头部可滚动列表视图的示例。这是一个非常简单和原始的例子。从这个,我认为您可以根据需要开发自己的自定义头部可滚动列表视图。它只有一个包含多个项目的列表视图和一个检索头部角度的传感器管理器。基于俯仰角并借助线性映射公式(将头部角度间隔与列表视图中项目数表示的间隔映射),我可以轻松制作一个头部可滚动的列表视图。希望对你有帮助。
布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.headangles.MainActivity" >
<ListView
android:id="@+id/list"
android:layout_height="wrap_content"
android:layout_width="match_parent">
</ListView>
</RelativeLayout>
活动:
public class MainActivity extends Activity implements SensorEventListener {
private SensorManager mSensorManager;
private Sensor mOrientation;
ListView listView ;
ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
mOrientation = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
mSensorManager.registerListener(this, mOrientation, SensorManager.SENSOR_DELAY_GAME);
// Get ListView object from xml
listView = (ListView) findViewById(R.id.list);
// Defined Array values to show in ListView
String[] values = new String[] { "Android List View",
"Adapter implementation",
"Simple List View In Android",
"Create List View Android",
"Android Example",
"List View Source Code",
"List View Array Adapter",
"Android Example List View"
};
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, android.R.id.text1, values);
// Assign adapter to ListView
listView.setAdapter(adapter);
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
@Override
public void onSensorChanged(SensorEvent event) {
/* *** need only pitch angle (head bouncing backwards and forward)*** */
float pitch_angle = event.values[1];
/* *** first interval head angle degrees *** */
int top_head_angle_limit = -110;
int bot_head_angle_limit = -70;
/* *** second interval *** */
int top_list_item_limit = 0;
int bot_list_item_limit = adapter.getCount();
/* *** linear mapping/ map interval [-110,-70](head angle degrees) -> [0, 8] list items *** */
/* *** linear mapping formula: (val - A)*(b-a)/(B-A) + a *** */
if(pitch_angle >= top_head_angle_limit && pitch_angle <= bot_head_angle_limit){
int selection = (int) ((pitch_angle - top_head_angle_limit)*(bot_list_item_limit - top_list_item_limit)/(bot_head_angle_limit - top_head_angle_limit) + top_list_item_limit);
Log.e("selection: ", String.valueOf(selection));
listView.setSelection(selection);
}
}
}
【讨论】:
clicking an item 怎么样,我们能做到吗?我是说专注的那个?试过listView.setOnItemClickListener() 还是不行