я наткнулся на аналогичной проблемой, как вы. В начале мне нужен только (довольно узкий) список в моем скользящем ящике, так что пользователь может просто получить пик в контенте. Ящик должен полностью открываться только тогда, когда выбран элемент в списке, и некоторое содержимое для этого элемента отображается в представлении изображения рядом со списком.
Поэтому расположение моего выдвижного ящика такова:
<RelativeLayout
android:id="@+id/drawerContainer"
android:layout_alignParentRight="true"
android:layout_width="120dp"
android:layout_height="match_parent">
<SlidingDrawer
android:id="@+id/drawer"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal"
android:handle="@+id/handle"
android:content="@+id/content">
<ImageView
android:id="@+id/handle"
android:layout_width="20dip"
android:layout_height="match_parent"
android:src="@drawable/drawer_handle />
<LinearLayout
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal">
<ListView
android:id="@+id/list"
android:layout_width="100dp"
android:layout_height="match_parent">
</ListView>
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone">
</ImageView>
</LinearLayout>
</SlidingDrawer>
</RelativeLayout>
Так на старте вид изображение исчезло. В OnItemClickListener для моего списка зрения я контролировать параметры макета ящика:
private OnItemClickListener onItemClickListener = new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (imageView.getVisibility() == View.GONE) {
ExpandViewAnimation animation = new ExpandViewAnimation(drawerContainer, ((View) drawerContainer.getParent()).getWidth());
animation.setDuration(500);
drawerContainer.setAnimation(animation);
animation.start();
imageView.setVisibility(View.VISIBLE);
}
//code for displaying an image in the imageview
}
};
Как вы можете видеть, я использую свою пользовательскую анимацию для контейнера ящика так, что сохраняется nicity скольжения ящика открытия. Вот класс анимации:
public class ExpandViewAnimation extends Animation {
int targetWidth;
int initialWidth;
View view;
public ExpandViewAnimation(View view, int targetWidth) {
this.view = view;
this.targetWidth = targetWidth;
initialWidth = view.getWidth();
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
int newWidth = initialWidth + (int) ((targetWidth - initialWidth) * interpolatedTime);
LayoutParams lp = new LayoutParams((LayoutParams) view.getLayoutParams());
lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
view.setLayoutParams(lp);
view.getLayoutParams().width = newWidth;
view.requestLayout();
if (newWidth == targetWidth) {
LayoutParams matchParentParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
view.setLayoutParams(matchParentParams);
view.clearAnimation();
}
}
@Override
public void initialize(int width, int height, int parentWidth, int parentHeight) {
super.initialize(width, height, parentWidth, parentHeight);
}
@Override
public boolean willChangeBounds() {
return true;
}
}
Причина, почему я устанавливаю новые параметры макета, потому что в самом начале я экономлю начальный набор параметров (как в файле макета) и применить его обратно в onDrawerClose:
private OnDrawerCloseListener onDrawerCloseListener = new OnDrawerCloseListener() {
@Override
public void onDrawerClosed() {
imageView.setVisibility(View.GONE);
imageView.setImageDrawable(null);
drawerContainer.setLayoutParams(initialLayoutParams);
}
};
Если вы хотите, чтобы пользователь мог полностью открыть ящик при перемещении салфетки на ручке, вы можете применить аналогичную анимацию в onTouchListener.
Последнее замечание: мой скользящий выдвижной ящик находится в макете, потому что он включен в этот макет, так что ящик доступен в нескольких местах. В общем, вам не нужен этот макет вокруг вашего ящика.
То, что я пытаюсь достичь, имеет частичный текст, отображаемый во все времена, пока пользователь не нажимает кнопку, показывая, что текст не расширяется, и содержимое полностью отображается. Это достаточно ясно? –
, так что, возможно, проще: a) иметь текстовое изображение и кнопку. изначально дают textview сокращенный текст, пока они не нажмут на кнопку больше, а затем дадут полный текст или b) имеют сокращенный текст, кнопку и скрытый текст с полным текстом, и когда они нажимают кнопку, отображается скрытый текстовый вид? – jkhouw1
Я пробовал это потенциальное решение, но, похоже, оно не работает. –