[英]ListVIew on Google Glass
是否有可能在Google Glass上實現列表外觀和功能(滾動顯示頭部移動)列表,如主玻璃屏幕上的列表。
我提到的列表在Glass上看起來像這樣:
我找不到任何關於此的文檔,所以任何幫助將不勝感激。
這是一個ListView ,可以響應tp頭部運動和ScrollView 。
這是我自己的頭部可滾動列表視圖的示例。 這是一個非常簡單和原始的例子。 從這一點開始,我認為您可以根據需要開發自己的自定義頭部可滾動列表視圖。 它只有一個包含多個項目的列表視圖和一個檢索頭部角度的傳感器管理器。 基於俯仰角並借助於線性映射公式(將頭部角度間隔映射到listview中項目編號所表示的間隔),我可以輕松地制作頭部可滾動列表視圖。 我希望它有所幫助。
布局:
<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);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.