我需要一起滚动项目,所选项目应该展开一部分。
我目前正在使用一个图库(我尝试使用viewflow和viewpager,但这些项目之间有很大的空间),但我需要知道如何才能实现此效果。
我有2个想法,但我不知道如何实现它。
1)可扩展部分是一个LinearLayout,其visibility =已消失,当选择该项时,此布局应该是可见的。 (图库没有“onItemSelectedListener”)
2)将每个元素视为一个片段(一旦我使用一个使用它的Viewpager,https://github.com/mrleolink/SimpleInfiniteCarousel)
它不一定是画廊,欢迎任何想法
我正在开展一项活动。
答案 0 :(得分:2)
取决于您想要的行为。有些问题可以一次扩展多个项目吗?是否要将视图分页(捕捉到位)或平滑滚动它们?
我的一个建议是为单个单元格制作自定义视图。然后以编程方式将它们添加到HorizontalScrollView对象。
HorizontalScrollView hsv = new HorizontalScrollView(activity);
LinearLayout hll = new LinearLayout(activity);
hll.setOrientation(LinearLayout.HORIZONTAL);
for(int i=0;i<items.length();i++){
hsv.addView(new CustomExpandView(item));
}
CustomExpandView将用于您的单元格,可能是这样的......
public class CustomExpandView extends RelativeLayout implements OnClickListener {
MyActivity mActivity = null;
ImageView ivImage, ivOverImage;
RelativeLayout rlView;
public CustomExpandView(Context context) {
super(context);
initialize();
}
public CustomExpandView(Context context, AttributeSet attrs) {
super(context, attrs);
initialize();
}
public void initialize() {
mActivity = (MyActivity) this.getContext();
LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.custom_cell_expand, this, true);
//you can initialize subviews here
rlView = (RelativeLayout) getChildAt(0);
ivImage = (ImageView) rlView.getChildAt(0);
ivOverImage = (ImageView) rlView.getChildAt(1);
rlView.setOnFocusChangeListener(new OnFocusChangeListener(){
@Override
public void onFocusChange(View v, boolean hasFocus) {
LinearLayout expand = v.findViewById(R.id.view_i_want_to_expand);
if(hasFocus)
expand.setVisibility(View.VISIBLE);
else
expand.setVisibility(View.GONE);
}
});
}
答案 1 :(得分:1)
你自己给出了答案。您可以使用带有片段的ViewPager,并使用动画来扩展窗口的下半部分。取决于您是否希望窗口全屏。 viewpager不一定需要片段,可以使用普通视图和适当的适配器。只需使用它,看看你最喜欢哪种解决方案。
下次,只需创建代码和应用,并提出更具体的问题,并使用代码来说明您遇到的问题。
答案 2 :(得分:1)
您只需定义TableView
只需一个TableRow
(或根据需要定义),并为onClickListener
内的每个View
设置一个TableRow
<1}},在任何点击时都会显示,所选的View
会自行展开。
我不知道你是否会在该行中有静态数量的View
,或者你会动态地构建它们,但这应该适用于其中任何一个,真正的“工作”在这里填充那一行。
获得View
行后,只需在每个onClickListener()
上声明OnClickListener myListener = new OnClickListener() {
@Override
public void onClick(final View v) {
v.setVisibility(View.VISIBLE);
}
};
即可。例如,这应该足够了:
onClick
作为TableRow
中所有商品的View
事件:
for(View v:myTableRowViews) v.setOnClickListener(myListener的);
这有一个缺点:您可以知道哪个onClick()
已被点击以供选择,但原则上您无法知道哪个已被取消选择,因此您需要跟踪最后选择的标签,声明一个类 - 每次触发// In your class declare a variable like this
View lastSelected = null;
OnClickListener myListener = new OnClickListener() {
@Override
public void onClick(final View v) {
if (lastSelected != null)
lastSelected.setVisibility(View.GONE);
v.setVisibility(View.VISIBLE);
lastSelected = v;
}
};
时都会设置宽变量并设置它,这样你的监听器就会变成这样:
layout_height
此外,您可以设置动画效果以使其更具吸引力,但主要是这个想法。
最后一件事:为了让它以这种方式工作,您需要设置TableRow
和View
项目中的View
,以便之后可能会扩展将附加部分设置为可见。另外,为了使它看起来很好,所有{{1}} s都必须是相同的高度(在缩小和扩展状态下)。