在Android Studio中添加ViewPagerIndicator

30

我试着在Android Studio中使用Jake Wharton的ViewPagerIndicator,但是不幸的是它无法正常工作。
我从这里下载了.aar文件,并将其包含在我的libs文件夹中。
我像这样引用它:

compile files('src/main/libs/viewpagerindicator_2.4.1.aar')

Android Studio 给了我以下错误:

Error:duplicate files during packaging of APK

我对Gradle不是很熟悉,当它给出这个错误时我不知道该怎么办。
你能帮我解决一下吗?

这是我的完整build.gradle文件:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 19
    buildToolsVersion "20.0.0"

    defaultConfig {
        applicationId "de.xxx"
        minSdkVersion 15
        targetSdkVersion 19
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_7
            targetCompatibility JavaVersion.VERSION_1_7
        }
    }

    buildTypes {
     release {
     runProguard false
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
    }
    }
}

dependencies {
    compile 'com.android.support:support-v4:20.0.0'
    compile 'com.github.amlcurran.showcaseview:library:5.0.0'
    compile files('src/main/libs/PdfViewer.jar')
    compile files('src/main/libs/viewpagerindicator_2.4.1.aar')
}
5个回答

73

更新

根据Jürgen 'Kashban' Wahlmann在答案中的说明,现在可以通过gradle添加ViewPagerIndicator:

顶级Build.gradle:

buildscript {
    repositories {
        maven { url "http://dl.bintray.com/populov/maven" }
        mavenCentral()
    }
}

allprojects {
    repositories {
        maven { url "http://dl.bintray.com/populov/maven" }
        mavenCentral()
    }
}

应用程序的 build.gradle 文件:

compile 'com.viewpagerindicator:library:2.4.1@aar'

此外,根据Enrico Susatyo所提供的答案,现在可以从Jitpack maven存储库中下载该库。按照以下方式操作:

在根build.gradle文件中:

allprojects {
        repositories {
            ...
            maven { url "https://jitpack.io" }
        }
    }
在项目的 build.gradle 中:
dependencies {
            compile 'com.github.JakeWharton:ViewPagerIndicator:2.4.1'
    }

------------

要在Android Studio中使用Android-ViewPagerIndicator,你不能从Gradle下载它。相反,你必须将该库作为“现有项目”导入到你当前的项目中。

按照以下步骤操作:

#1 从GitHub下载源代码

#2 在你的Android Studio项目中:文件 -> 项目结构 -> 添加(+符号)-> 导入现有项目。只导入名为“library”的文件夹,而不是整个项目(将导入选项保留为Android Studio建议的选项)。

#3 如果你的build.gradle文件中指定的“compileSdkVersion”与Android-ViewPagerIndicator项目中指定的不匹配,请更改后者。同样适用于任何其他属性,如“minSdkVersion”甚至是当前的support库。

#4 将Android-ViewPagerIndicator项目添加为你的build.gradle模块的依赖项:

dependencies {
    compile project(':library')
}

# 5 使用Gradle文件同步项目。


我很高兴能够帮助你! - Víctor Albertos
是的,它正常工作,其他答案都不起作用,也不适用于新的Android Studio。+1 谢谢。 - Ajay S
1
唯一一个真正有效的答案,从一百个答案中找到了它。谢谢。 - samvel1024
请使用此答案(https://dev59.com/eV8e5IYBdhLWcg3wfaUy#35761063)于2016年。 - MiguelHincapieC
这段代码已经失效了(截至2021年12月),因为bintray已经关闭。但是有一个GitHub问题提供了一个即插即用的替代方案:https://github.com/JakeWharton/ViewPagerIndicator/issues/415 - andygeers

66

可以通过Gradle像这样导入:

顶层Build.gradle:

buildscript {
    repositories {
        maven { url "http://dl.bintray.com/populov/maven" }
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.12.+'
    }
}

allprojects {
    repositories {
        maven { url "http://dl.bintray.com/populov/maven" }
        mavenCentral()
    }
}
在您的应用程序的 build.gradle 文件中,将以下内容添加到 dependencies 部分:
compile 'com.viewpagerindicator:library:2.4.1@aar'

(添加 @aar 可避免 "不支持为 apklib 打包" 的错误)

对我来说运行良好。


2
干得好!这个答案应该标记为“正确”。 - jimpanzer
当我尝试使用时出现了"无法解析:com.viewpagerindicator:library:2.4.1"的错误。 - Rct Lynx
@RctLynx,我有一段时间没有检查过这个了...看起来仍然是正确的版本号。但是随着新的设计支持库,现在不再需要包含自定义ViewPager指示器(https://developer.android.com/tools/support-library/features.html#v4)。 - Jürgen 'Kashban' Wahlmann
在我的测试中,buildscript repositories 中对 Maven URL 的第一次引用是不必要的,只有 allprojects repositories 部分中的第二次使用是必要的。 - ThomasW

44
截止至今日(2016年3月),Jitpack的Maven仓库对我可用:https://jitpack.io/#JakeWharton/ViewPagerIndicator/2.4.1/aar 在根build.gradle中:
allprojects {
        repositories {
            ...
            maven { url "https://jitpack.io" }
        }
    }

在项目的build.gradle文件中:

dependencies {
            compile 'com.github.JakeWharton:ViewPagerIndicator:2.4.1'
    }

1
非常有用。朋友们请注意,为了支持您的应用程序,最低SDK应为11。(这只是新手的提示) - Subhalaxmi

1
你可以不使用任何第三方库来完成它。
最终结果:

enter image description here

1)使用帧布局作为Viewpager的容器,然后在其底部添加一个线性布局。

<FrameLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:fitsSystemWindows="true"
                app:layout_collapseMode="parallax">

                <android.support.v4.view.ViewPager
                    android:id="@+id/product_images_pager"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" />

                <HorizontalScrollView
                    android:layout_width="match_parent"
                    android:layout_height="20dp"
                    android:layout_gravity="bottom|center_horizontal"
                    android:layout_margin="10dp">

                    <LinearLayout
                        android:id="@+id/indicator_root"
                        android:layout_width="20dp"
                        android:layout_height="match_parent"
                        android:layout_gravity="bottom|center_horizontal"
                        android:gravity="center_horizontal"
                        android:orientation="horizontal">

                    </LinearLayout>
                </HorizontalScrollView>

            </FrameLayout>

2) 为指标定义尺寸和边距

  //define globaly 
   private LinearLayout.LayoutParams imageParam;

   //init params
      int margin = Utils.pxFromDp(getActivity(), 5);
        int width = Utils.pxFromDp(getActivity(), 8);
        imageParam = new LinearLayout.LayoutParams(width, width);
        imageParam.setMargins(margin, margin, margin, margin);

将线性布局中的指示器添加:

3) 在线性布局中添加指示器

 for (int indicatorCount = 0; indicatorCount < productFromShoppingList.getProductImages().size();
             indicatorCount++) {

            ImageView imageIndicator =
                    new ImageView(getActivity());

            imageIndicator.setAdjustViewBounds(true);
            imageIndicator.setScaleType(ImageView.ScaleType.FIT_XY);
            imageIndicator.setLayoutParams(imageParam);

            indicatorContainer.addView(imageIndicator);
            indicators.add(imageIndicator);
            imageIndicator.setBackgroundResource(R.drawable.indicator_unselected);
        }

4) 在0位置初始化指示器

 indicators.get(0).setBackgroundResource(R.drawable.indicator_unselected);

5) 在视图页面更改时更新指示器

carousalViewPager.setAdapter(new slidingPagerAdapter(getActivity(),
            productFromShoppingList.getProductImages()));

    carousalViewPager
            .addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                @Override
                public void onPageScrolled(int position,
                                           float positionOffset, int positionOffsetPixels) {

                }

                @Override
                public void onPageSelected(int position) {

                    currentPageIndex = position;
                    updateIndicators(currentPageIndex);
                }

                @Override
                public void onPageScrollStateChanged(int state) {

                }
            });


private void updateIndicators(int selectedPostion) {
    for (int indicatorPosition = 0; indicatorPosition < indicators.size(); indicatorPosition++) {
        indicators.get(indicatorPosition).setBackgroundResource(indicatorPosition == selectedPostion ? R.drawable.indicator_selected
                : R.drawable.indicator_unselected);
    }
}

最后但并非最不重要的是,添加这两个指示器的可绘制对象。

indicator_unselected.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <stroke
        android:width="1dp"
        android:color="@color/white" />
</shape>

indicator_selected.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <corners android:radius="100dp" />
    <solid android:color="@android:color/white" />
</shape>

indicatorContainer和indicators未初始化。 - barış çıracı
1
indicatorContainer变量是Java代码中indicator_root的线性布局。indicators是一个空的ImageView数组。 - Hitesh Sahu

0

对我来说,尝试从Maven集成它并没有成功。我总是遇到以下构建异常和无法解析的样式:

找不到与给定名称vpiCirclePageIndicatorStyle vpiTitlePageIndicatorStyle相匹配的资源

通过jitpack添加依赖项就非常完美:

在根build.gradle中:

allprojects {
        repositories {
            ...
            maven { url "https://jitpack.io" }
        }
    }

在项目的build.gradle文件中:
dependencies {
            compile 'com.github.JakeWharton:ViewPagerIndicator:2.4.1'
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接