Bạn có thể sử dụng thanh trượt để hiển thị thanh tải, tiến trình hoặc điều hướng ở cuối màn hình. Thanh trượt là thành phần trải nghiệm người dùng toàn cầu và cần được xử lý cẩn thận khi triển khai chúng trong Glassware.
Thanh trượt
Thanh trượt cuộn được dùng để cho biết vị trí của một thẻ khi bạn vuốt qua nhiều thẻ. Bạn có thể tạo cùng một loại hiệu ứng bằng cách sử dụng Slider.Scroller
.
- Sử dụng
Slider.from()
để tạoSlider
sử dụngView
nhằm hiển thị thanh trượt. - Tạo
Slider.Scroller
bằngstartScroller()
và đặt vị trí tối đa và ban đầu.
Dưới đây là một cách triển khai đơn giản giúp tạo hiệu ứng cho trình cuộn sang vị trí tiếp theo khi người dùng nhấn vào:
public final class SliderActivity extends Activity {
private static final int MAX_SLIDER_VALUE = 5;
private static final long ANIMATION_DURATION_MILLIS = 5000;
private CardScrollView mCardScroller;
private Slider mSlider;
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
// Create the cards for the view
mCardScroller = new CardScrollView(this);
mCardScroller.setAdapter(new CardAdapter(createCards()));
// Set the view for the Slider
mSlider = Slider.from(mCardScroller);
mCardScroller.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
processSliderRequest(position+1);
}
});
setContentView(mCardScroller);
}
private void processSliderRequest(position) {
Slider.Scroller scroller = mSlider.startScroller(MAX_SLIDER_VALUE, 0);
// Animate the slider to the next position. The slider
// automatically hides after the duration has elapsed
ObjectAnimator.ofFloat(scroller, "position", 0, position)
.setDuration(ANIMATION_DURATION_MILLIS)
.start();
}
}
Thanh trượt thời gian gia hạn
Thanh trượt thời gian gia hạn hoạt động trong các hoạt động mà người dùng thấy hữu ích, nhưng không bắt buộc phải tương tác. Bạn có thể thêm ảnh động này bằng cách sử dụng Slider.GracePeriod
.
- Sử dụng
Slider.from()
để tạoSlider
sử dụngView
nhằm hiển thị thanh trượt. - Tạo
GracePeriod.Listener
và triển khaionGracePeriodEnd()
vàonGracePeriodCancel()
để xử lý các sự kiện đó. - Tạo
Slider.GracePeriod
và bắt đầu ảnh động bằng cách chuyểnGracePeriod.Listener
vào phương thứcstartGracePeriod()
. - Ghi đè
onBackPressed()
của hoạt động để xử lý cử chỉ vuốt xuống. - Nếu người dùng vuốt xuống, hãy gọi
cancel()
trênSlider.GracePeriod
để đóng thanh trượt.
Trong ví dụ sau, trình cuộn thời gian gia hạn được khởi tạo bằng một trình nghe có chức năng phát âm thanh thành công khi thời gian kết thúc và một âm thanh bị loại bỏ nếu thanh trượt thời gian gia hạn bị huỷ:
public final class SliderActivity extends Activity {
...
private Slider.GracePeriod mGracePeriod;
private final GracePeriod.Listener mGracePeriodListener =
new GracePeriod.Listener() {
@Override
public void onGracePeriodEnd() {
// Play a SUCCESS sound to indicate the end of the grace period.
AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
am.playSoundEffect(Sounds.SUCCESS);
mGracePeriod = null;
}
@Override
public void onGracePeriodCancel() {
// Play a DIMISS sound to indicate the cancellation of the grace period.
AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
am.playSoundEffect(Sounds.DISMISSED);
mGracePeriod = null;
}
};
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
// Create the cards for the view
mCardScroller = new CardScrollView(this);
mCardScroller.setAdapter(new CardAdapter(createCards()));
// Set the view for the Slider
mSlider = Slider.from(mCardScroller);
mCardScroller.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
mGracePeriod = mSlider.startGracePeriod(mGracePeriodListener);
}
});
setContentView(mCardScroller);
}
@Override
public void onBackPressed() {
// If the Grace Period is running,
// cancel it instead of finishing the Activity.
if (mGracePeriod != null) {
mGracePeriod.cancel();
} else {
super.onBackPressed();
}
}
}
Thanh trượt xác định
Thanh trượt xác định chủ yếu được dùng để hiển thị tiến trình nơi bạn có thể tính toán thời điểm hoàn thành một tác vụ. Bạn có thể thêm ảnh động này bằng cách sử dụng Slider.Determinate
.
- Sử dụng
Slider.from()
để tạoSlider
sử dụngView
nhằm hiển thị thanh trượt. - Tạo
Slider.Determinate
bằngstartScroller()
và đặt vị trí tối đa và ban đầu. - Khi ảnh động kết thúc, hãy gọi phương thức
hide()
trênSlider.Determinate
để ẩn thanh trượt.
Dưới đây là một cách triển khai đơn giản giúp tạo hiệu ứng cho trình cuộn sang một vị trí đã đặt khi người dùng nhấn vào:
public final class SliderActivity extends Activity {
...
private Slider.Determinate mDeterminate;
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
// Create the cards for the view
mCardScroller = new CardScrollView(this);
mCardScroller.setAdapter(new CardAdapter(createCards()));
// Set the view for the Slider
mSlider = Slider.from(mCardScroller);
mCardScroller.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
mDeterminate = mSlider.startDeterminate(MAX_SLIDER_VALUE, 0);
ObjectAnimator animator = ObjectAnimator.ofFloat(mDeterminate,
"position", 0, MAX_SLIDER_VALUE);
// Hide the slider when the animation stops.
animator.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
mDeterminate.hide();
}
});
// Start an animation showing the different positions of the slider.
animator.setDuration(ANIMATION_DURATION_MILLIS).start();
}
});
setContentView(mCardScroller);
}
}
Thanh trượt không xác định
Bạn có thể sử dụng thanh trượt không xác định để tải các màn hình, nơi khó tính toán khi nhiệm vụ kết thúc. Bạn có thể thêm ảnh động này bằng cách sử dụng Slider.Indeterminate
.
- Sử dụng
Slider.from()
để tạoSlider
sử dụngView
nhằm hiển thị thanh trượt. - Bắt đầu ảnh động bằng phương thức
Slider.startIndeterminate()
. - Khi bạn đã sẵn sàng dừng ảnh động, hãy gọi phương thức
hide()
trênSlider.Indeterminate
.
Dưới đây là một cách triển khai đơn giản giúp tạo cuộn cuộn không xác định khi người dùng nhấn vào thẻ và ẩn thẻ khi người dùng nhấn lại:
public final class SliderActivity extends Activity {
...
private Slider.Indeterminate mIndeterminate;
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
// Create the cards for the view
mCardScroller = new CardScrollView(this);
mCardScroller.setAdapter(new CardAdapter(createCards()));
// Set the view for the Slider
mSlider = Slider.from(mCardScroller);
mCardScroller.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// Toggle between showing/hiding the indeterminate slider.
if (mIndeterminate != null) {
mIndeterminate.hide();
mIndeterminate = null;
} else {
mIndeterminate = mSlider.startIndeterminate();
}
});
setContentView(mCardScroller);
}
}