Horizo​​ntalScrollView或Carrousel?

我想创build一个HorizontalScrollView ,但有一些“效果”,就像这个例子 ,或这个其他的例子 。 事情是,我不知道我将不得不使用多less物品; 我从API获取ImageView ,因此它应该是dynamic的。 我怎样才能做到这一点,如果它被选中,使用下面的TextView变得更大? 我在SO上发现的最接近的例子就是在这里 。 这正是我所需要的,但我已经testing了给出的答案,这对我来说不起作用…但是问题的形象正是我想要的。 任何人都可以指导我做这个?

比方说我将用5个ImageView testing ,所以如何dynamic添加这些ImageView的例子对我来说也是很好的。

另一个例子是Snapchat APP,但不同的是,我想添加一些效果,如select更大的东西。

编辑

我想要得到一个例子,如何做像一个布局(适配器)的自定义Horizo​​ntalScrollView和最重要的,如果可能的添加一个效果点击一个,我想要的适配器,因为我需要得到的项目点击当然。 我认为我应该使用RecycleView作为@UncaughtException对我说,因为我不知道我会得到多less图像,我将不得不把我的APP,所以我认为这是解决scheme。

这将是Snapchat HoritzontalScrollView和SO图像的混合

Solutions Collecting From Web of "Horizo​​ntalScrollView或Carrousel?"

步骤1:

ViewPager水平显示图像。

第2步:

ScaleAnimation类应用于单击的项目以放大它。 这可以在ViewPagerPagerAdapterinstantiateItem()方法中PagerAdapter

此外,还有一些随时可用的开源小部件,如CoverFlowFancyCoverFlow 。 你可能想看看源代码,看看它们是如何工作的。

编辑:

首先,关于如何处理未知数量的图像的问题,您应该认识到,在所有这些小部件( ListViewGridViewViewPager等)中,来自API的对象的数量始终是未知的,即它变成在接收到API响应时已知。 所以如果你第一次以普通的方式实现一个ViewPager ,你会看到如何处理。 基本上你必须使用Adapter和模型对象来填充ViewPagerListView 。 API响应将是JSON或XML,parsing后,您将知道项目的确切数量。

所以我认为你应该以正常的方式首先实现一个ViewPager 。 有很多这样的例子可用。 两个有趣的是这一个 , 这一个 。 他们对你的情况很有意思,因为他们还包含如何放大图像的示例代码。

现在来解决第二个问题:我们如何放大图像。 要做到这一点,一种方法是使用ScaleAnimation类。 例如,假设您想要在中心附近将图像放大100%

 ScaleAnimation scaleAnimation = new ScaleAnimation(1.0f, 1.5f, 1.0f, 1.5f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); scaleAnimation.setDuration(200); scaleAnimation.setInterpolator(new AccelerateDecelerateInterpolator()); imageView.startAnimation(scaleAnimation); 

我将在ViewPagerPagerAdapterinstantiateItem()方法的图像上使用这段代码。 这应该工作。 或者您可以尝试前面两个示例之一的缩放animation方法。

恐怕您必须尝试使用​​这些示例作为指导来创build一个工作项目。 那么我们可以进一步讨论你所面对的其他问题。 我相信这可以很容易地完成,我知道你可以做到这一点。 最好 …

编辑2:

按照你给出的两个例子,你看过这个和这个吗? 那是你在找什么? 它是否能让你更接近解决问题?

在你的情况下,你可以使用ViewPager ,但如果我是你,我会去与LinearLayoutManager的方向设置为Horizontal RecyclerView ,所以你将不需要一个HorizontalScrollView ,并使用RecyclerView你也将得到你正在寻找的adapter东西对于..

现在为了scale或显示一些其他效果click以区别于他人,你可以Animate那个特定的视图,

我写了一些演示代码,在这里发布所需的文件,让我知道如果这是你想要的,

活动

 /** * Created by Satyen on 10/27/15. **/ public class SlidingDrawerActivity extends Activity { RecyclerView rcyList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout_scroll_list); rcyList = (RecyclerView) findViewById(R.id.rcyList); LinearLayoutManager layoutManager = new LinearLayoutManager(this); layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); rcyList.setLayoutManager(layoutManager); /* rcyList.addItemDecoration( new DividerItemDecoration(this, null));*/ MyRecyclerViewAdapter myRecyclerAdapter = new MyRecyclerViewAdapter(this); rcyList.setAdapter(myRecyclerAdapter); } } 

活动布局

 <!-- layout_scroll_list.xml --> <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" android:layout_weight="1"> <android.support.v7.widget.RecyclerView android:id="@+id/rcyList" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" android:background="@android:color/holo_blue_dark" android:paddingLeft="8dp" android:paddingRight="8dp" /> </FrameLayout> </LinearLayout> 

适配器

 public class MyRecyclerViewAdapter extends RecyclerView.Adapter<MyRecyclerViewAdapter.CustomViewHolder> { private Context mContext; View animatedView = null; public MyRecyclerViewAdapter(Context context) { this.mContext = context; } @Override public CustomViewHolder onCreateViewHolder(ViewGroup viewGroup, final int i) { final View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_row, null); CustomViewHolder viewHolder = new CustomViewHolder(view); /*final Animation a = AnimationUtils.loadAnimation(mContext, R.anim.scale_up);*/ view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // You can tweak with the effects here if (animatedView == null) { animatedView = view; } else { animatedView.setAnimation(null); animatedView = view; } ScaleAnimation fade_in = new ScaleAnimation(1f, 1.3f, 1f, 1.3f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); fade_in.setDuration(100); // animation duration in milliseconds fade_in.setFillAfter(true); // If fillAfter is true, the transformation that this animation performed will persist when it is finished. view.startAnimation(fade_in); } }); return viewHolder; } @Override public void onBindViewHolder(CustomViewHolder customViewHolder, int i) { //Setting text view title customViewHolder.textView.setText("Data No. " + i); } @Override public int getItemCount() { return 10; } public class CustomViewHolder extends RecyclerView.ViewHolder { protected ImageView imageView; protected TextView textView; public CustomViewHolder(View view) { super(view); this.imageView = (ImageView) view.findViewById(R.id.thumbnail); this.textView = (TextView) view.findViewById(R.id.title); } } } 

适配器行布局

 <!-- list_row.xml --> <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="100dp" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:orientation="vertical"> <RelativeLayout android:layout_width="80dp" android:layout_height="match_parent"> <ImageView android:id="@+id/thumbnail" android:layout_width="100dp" android:layout_height="80dp" android:layout_alignParentLeft="true" android:layout_centerInParent="true" android:scaleType="centerCrop" android:src="@mipmap/ic_launcher" /> <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/thumbnail" android:layout_centerHorizontal="true" android:text="dafdafda" android:textColor="#222" android:textSize="12sp" /> </RelativeLayout> </LinearLayout> 

除了你还可以使用TwoWayView来实现HorizontalListView的function,

以上只是一些演示代码,可能需要一些调整,让我知道如果这有助于或要求进一步…

还添加输出的屏幕截图

没有任何项目被点击的布局

点击第二项时的布局