使用android中的粘性标题在视差ListView上启用click事件

时间:2016-05-30 07:32:56

标签: android listview parallax listitem

我在android中实现了一个带有视差效果的listView和一个粘性列表视图,我使用了以下链接作为参考并成功实现了这个功能,但我在点击listheader上方的背景图片时遇到了问题,可以任何人帮我搞清楚,我可以找到listitems的儿童视图的点击事件

参考链接:http://javatechig.com/android/listview-header-parallax-with-sticky-view-in-android

我无法发布我的代码,因为它太大而无法发布,但如果仍然需要我可以发布一些部分。

3 个答案:

答案 0 :(得分:3)

我看到参考链接@Jigar Makwana发布了。你不会在imageView上获得点击事件,因为在imageView上,listview标题布局中使用了“空间控件”,而在它下面是 heroimageView (ImageView)。因此,当您单击不是imageView的标题部分时,它就是Space小部件。即使空间控制无法获得点击事件,您也必须使用简单的查看或在listview标题内使用 imageView而不是空格。但这不是实施这种设计的正确方法。功能。如果您想以正确的方式进行,请按照以下链接进行操作。

您的参考链接不是具有粘性布局的parallex的好例子。 适当的例子是Handling Scrolls with CoordinatorLayout& Collapsing Toolbar Layout

你可以在imageView中使用CoordinatorLayout,你想要点击事件来处理并制作一个包含你的headingText的布局,并将其添加为listview标题。这就是它并且完美无缺,你将永远不会再看到bug。

代码很简单:

    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/transparent"
        android:fitsSystemWindows="true"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:elevation="0dp">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar_transparent"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:fitsSystemWindows="true"
            android:minHeight="?attr/actionBarSize"
            app:contentScrim="?attr/colorPrimary"
            app:expandedTitleMarginEnd="64dp"
            app:expandedTitleMarginStart="48dp"
            app:expandedTitleTextAppearance="@android:color/transparent"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <RelativeLayout
                android:id="@+id/relativeLayout_main_profile"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="7dp"
                android:animateLayoutChanges="true"
                app:layout_collapseParallaxMultiplier="0.7"
                app:layout_collapseMode="parallax"
                tools:context="com.mazkara.user.activity.ProfileActivity">
               <ImageView
                android:id="@+id/heroImageView"
                android:layout_width="match_parent"
                android:layout_height="250dp"
                android:background="@drawable/wallpaper"
                android:scaleType="fitCenter" />
            </RelativeLayout>
// only if you use toolbar then specify here your toolbar start
            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar_main_transparent"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="@color/transparent"
                app:layout_collapseMode="pin"
                app:layout_scrollFlags="scroll|enterAlways"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
                app:titleTextAppearance="@color/white">
            </android.support.v7.widget.Toolbar>    //toolbar end 
        </android.support.design.widget.CollapsingToolbarLayout>
       <TextView
        android:id="@+id/stickyView"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#222"
        android:gravity="center_vertical"
        android:paddingLeft="10dp"
        android:text="Heading1"
        android:textColor="#fff"
        android:textSize="20sp"
        android:layout_gravity="bottom"
        app:layout_collapseMode="pin"
        android:textStyle="bold" />

    </android.support.design.widget.AppBarLayout>


     <android.support.v7.widget.RecyclerView
    android:id="@+id/design_bottom_sheet"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:layout_behavior="@string/bottom_sheet_behavior">
</android.support.design.widget.CoordinatorLayout>

就是这样。

答案 1 :(得分:0)

using System; namespace Converter { class Program { static void Main() { float? FahrenheitInput = null; double? CelsiusInput = null; float? KilogramInput = null; float? PoundsInput = null; int UserChoice = 0; do { Console.WriteLine("What would you like to convert? Enter the corresponding number.\n1. Fahrenheit to Celsius"); Console.WriteLine("2. Celsius to Fahrenheit\n3. Pounds to Kilograms\n4. Kilograms to pounds\n5. Exit program"); UserChoice = int.Parse(Console.ReadLine()); switch (UserChoice) { case 1: Console.WriteLine("Enter the temperature in Fahreinheit, number only:"); FahrenheitInput = float.Parse(Console.ReadLine()); Console.Clear(); Console.WriteLine(FahrenheitInput + " degrees fahrenheit in Celsius is " + Program.FahrenheitToCelsius(FahrenheitInput) + "\n\n"); break; case 2: Console.WriteLine("Enter the temperature in Celsius, number only:"); CelsiusInput = double.Parse(Console.ReadLine()); Console.Clear(); Console.WriteLine(CelsiusInput + " degrees Celius in fahrenheit is " + Program.CelsiusToFahrenheit(CelsiusInput) + "\n\n"); break; case 5: break; default: Console.WriteLine("This is not a valid entry. Please enter 1, 2, 3, 4, or 5."); break; } } while (UserChoice != 5); } public static float? FahrenheitToCelsius(float? INPUT) { return (INPUT - 32) * 5 / 9; } public static double? CelsiusToFahrenheit(double? INPUT) { return INPUT * 1.8 + 32; } }

之后添加此代码
listView.setAdapter(adapter);

答案 2 :(得分:0)

我使用与您相同的代码。您应该将触摸事件传递到标题图像

        listHeader = getLayoutInflater().inflate(R.layout.list_header, mListView, false);
        mListView.addHeaderView(listHeader, null, true);
        listHeader.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            heroImageView.onTouchEvent(event);
            return true;
        }
    });

heroImageView是图像具有视差效果。