2014-09-06 44 views
26

我试图让杰克沃顿的ViewPagerIndicator与Android Studio一起工作,但不幸的是它无法工作。
我从here下载了.aar文件,并将其包含在我的libs文件夹中。
我引用这样的:
添加ViewPagerIndicator到Android Studio

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

Android的工作室给了我以下错误:

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') 
} 

回答

72

UPDATE

基础上answer given by Jürgen 'Kashban' Wahlmann,现在可以通过gradle这个添加ViewPagerIndicator:

顶级构建。 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:[email protected]' 

此外,基于对answer given by Enrico Susatyo现在看来可以下载从Jitpack Maven仓库的库。做到这一点,如下所示:

在根build.grade:

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

在项目build.grade:

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

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

要在Android Studio中使用Android-ViewPagerIndicator,您无法从gradle下载它。相反,您必须将库作为“现有项目”导入到当前项目中。

遵循以下步骤:

#从GitHub 1下载source code

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

#3如果您的build.gradle中指定的“compileSdkVersion”与Android-ViewPagerIndicator项目中指定的不匹配,请更改第二个。这同样适用于任何其他属性,例如“minSdkVersion”或甚至当前的支持库。

#4将Android-ViewPagerIndicator项目作为依赖添加到您的构建中。gradle模块:

dependencies { 
    compile project(':library') 
} 

#5与gradle文件同步项目。

+1

作品perfec TLY! 非常感谢你帮助我! :) – carstenbaumhoegger 2014-09-06 22:19:33

+0

我很高兴我能帮助你! – 2014-09-06 22:24:52

+0

是的,它工作正常,其余的答案不工作,或者不在新的android工作室。 +1谢谢 – 2014-10-16 21:00:42

66

它可以通过摇篮导入这样的:

顶级的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添加到您的依赖关系部分:

compile 'com.viewpagerindicator:library:[email protected]' 

(添加@aar以避免“apklib包装不支持错误”)

工作正常为了我。

+2

伟大的工作!这个答案应该被标记为“正确”。 – jimpanzer 2014-10-29 09:28:37

+0

是的,它比已经接受的答案要好。 – 2014-10-29 15:20:57

+0

你是一个救生员... – baboo 2015-02-02 11:55:22

41

截至今天(2016年3月),Jitpack的行家回购为我工作: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' 
    } 
+3

希望我能多点赞!谢谢! – 2016-03-22 22:36:25

+1

真的很有帮助。朋友请注意支持你的申请最低sdk应该11.(只是提示新鲜) – 2016-03-28 18:55:45

0

你可以做它没有任何第三方库

最终结果:

enter image description here

1)使用帧布局作为Viewpager容器中,然后在它的底部添加的LinearLayout。

<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)线性布局

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); 

初始化指示器定义指标

//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)添加指示器大小和余量5)在vi上更新指标EW寻呼机页变化

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); 
    } 
} 

最后但并非最不重要添加此2绘制的指标

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>