2013-03-17 39 views
6

Tôi đang làm việc với viewPager và phân đoạn và bây giờ tôi đang cố gắng để có được một hình ảnh động tùy chỉnh, các zoom-out page transformation được chính xác.Hoạt ảnh tùy chỉnh cho viewpager

Nhưng tôi gặp phải một vài lỗi. Tôi sẽ đặt các lỗi trong bình luận với đoạn mã.

lớp MainActivity

import android.support.v4.app.FragmentManager; 
import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.view.ViewPager; 
import android.view.Menu; 

public class MainActivity extends FragmentActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main);/** Getting a reference to the ViewPager defined the layout file */ 
     ViewPager pager = (ViewPager) findViewById(R.id.pager); 

     /** Getting fragment manager */ 
     FragmentManager fm = getSupportFragmentManager(); 

     /** Instantiating FragmentPagerAdapter */ 
     MyFragmentPagerAdapter pagerAdapter = new MyFragmentPagerAdapter(fm); 

     /** Setting the pagerAdapter to the pager object */ 
     pager.setAdapter(pagerAdapter); 

     // **ERROR:The method setPageTransformer(boolean, ViewPager.PageTransformer) in the type ViewPager is not applicable for the arguments (boolean, ZoomOutPageTransformer)** 
     pager.setPageTransformer(true, new ZoomOutPageTransformer()); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     getMenuInflater().inflate(R.menu.activity_main, menu); 
     return true; 
    } 
} 

Lớp ZoomOutPageTransformer

import android.view.View; 
    // **ERROR on 'ViewPager.PageTransformer --> ViewPager cannot be resolved to a type ** 
    public class ZoomOutPageTransformer implements ViewPager.PageTransformer { 
     private static float MIN_SCALE = 0.85f; 
     private static float MIN_ALPHA = 0.5f; 

     public void transformPage(View view, float position) { 
      int pageWidth = view.getWidth(); 
      int pageHeight = view.getHeight(); 

      if (position < -1) { // [-Infinity,-1) 
       // This page is way off-screen to the left. 
       view.setAlpha(0); 

      } else if (position <= 1) { // [-1,1] 
       // Modify the default slide transition to shrink the page as well 
       float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position)); 
       float vertMargin = pageHeight * (1 - scaleFactor)/2; 
       float horzMargin = pageWidth * (1 - scaleFactor)/2; 
       if (position < 0) { 
        view.setTranslationX(horzMargin - vertMargin/2); 
       } else { 
        view.setTranslationX(-horzMargin + vertMargin/2); 
       } 

       // Scale the page down (between MIN_SCALE and 1) 
       view.setScaleX(scaleFactor); 
       view.setScaleY(scaleFactor); 

       // Fade the page relative to its size. 
       view.setAlpha(MIN_ALPHA + 
         (scaleFactor - MIN_SCALE)/
         (1 - MIN_SCALE) * (1 - MIN_ALPHA)); 

      } else { // (1,+Infinity] 
       // This page is way off-screen to the right. 
       view.setAlpha(0); 
      } 
     } 
    } 
+0

Bạn có nhập khẩu các 'ViewPager. Giao diện PageTransformer' trong tệp mà bạn khai báo 'ZoomOutPageTransformer'? – Luksprog

+0

Đoạn mã là tất cả những gì tôi có, tôi cũng đã làm lối tắt 'ctrl + shift + o' để có được tất cả các mục nhập chính xác. Vì vậy, tôi nghĩ rằng tôi có tất cả các hàng nhập khẩu cần thiết. – mXX

+0

Bạn có 'import android.support.v4.view.ViewPager.PageTransformer;' trong tệp 'ZoomOutPageTransformer' không? Nếu không, bạn nên có nó. – Luksprog

Trả lời

6

Tôi đã giải quyết vấn đề:

  1. Tải mới nhất Android SDK
  2. Browse để android-sdk-windows \ extras \ \ hỗ trợ android \ v4
  3. Sao chép android-support- v4.jar vào thư mục libs của bạn trong dự án
  4. Làm sạch dự án của bạn
  5. Chạy mã của bạn

Điều này làm việc cho tôi, tải xuống thư viện hỗ trợ thông qua ecplise đã cho tôi lỗi này. Điều này đã khắc phục sự cố cho tôi

+0

Xin cảm ơn ,, android-support-v4.jsr mới nhất cũng đã làm việc cho tôi – inox

0

Sau khi cập nhật thư viện hỗ trợ Android v4, bạn có thể xóa các dự án từ nhật thực. Và sau đó nhập lại dự án. Làm sạch sẽ, mọi thứ sẽ ổn thôi!

+0

Tôi có nên xóa dự án của mình không? Và những gì bạn có nghĩa là cập nhật thư viện hỗ trợ v4? Và làm thế nào để tôi làm điều đó? – mXX

2

@mXX gần như đúng. Nhưng đối với những người vẫn còn có vấn đề (như tôi) tôi cần phải thêm một điểm vào thủ tục của mình.

Bạn cần cập nhật gói Thư viện hỗ trợ Android của mình. Nhưng nếu bạn có nó bây giờ bạn cần phải gỡ bỏ cài đặt nó đầu tiên sau đó cài đặt nó một lần nữa để có được một cái mới.

Nếu bạn có IntellijIdea:

  1. mở SDK cửa sổ quản lý từ "Tools/Android/SDK Manager"
  2. Tìm thư mục Exteras sau đó kiểm tra thư viện hỗ trợ Android. Nếu trạng thái của nó là , hãy nhấp vào "Xóa 1 gói ..." để xóa nó.
  3. Kiểm tra gói này và nhấp vào nút cài đặt.
  4. Điều hướng đến \ extras \ android \ support \ v4 rồi sao chép android-support-v4.jar và dán vào thư mục Libs của bạn.
  5. Idea nên biên dịch lại dự án tự động, tuy nhiên nếu nó đã không làm rằng sau đó bạn nên biên dịch lại nó bằng tay bằng cách click vào "Xây dựng/Rebuild Dự án"

Vậy là xong;)

1

Đối bất cứ ai vẫn còn mắc kẹt về vấn đề này v4 hỗ trợ hiện tại không nhập khẩu giao diện ViewPager v4: nó không yêu cầu trường hợp lớp tĩnh ViewPager. Chỉ cần triển khai PageTransformer. Giao diện PageTransformer đã được bao bọc bên trong với ViewPager.

public class ZoomOutPageTransformer implements PageTransformer { 

    private static float MIN_SCALE = 0.85f; 
    private static float MIN_ALPHA = 0.5f; 

    public void transformPage(View view, float position) { 
     int pageWidth = view.getWidth(); 
     int pageHeight = view.getHeight(); 

     if (position < -1) { // [-Infinity,-1) 
      // This page is way off-screen to the left. 
      view.setAlpha(0); 

     } else if (position <= 1) { // [-1,1] 
      // Modify the default slide transition to shrink the page as well 
      float scaleFactor = Math.max(MIN_SCALE, 1 - Math.abs(position)); 
      float vertMargin = pageHeight * (1 - scaleFactor)/2; 
      float horzMargin = pageWidth * (1 - scaleFactor)/2; 
      if (position < 0) { 
       view.setTranslationX(horzMargin - vertMargin/2); 
      } else { 
       view.setTranslationX(-horzMargin + vertMargin/2); 
      } 

      // Scale the page down (between MIN_SCALE and 1) 
      view.setScaleX(scaleFactor); 
      view.setScaleY(scaleFactor); 

      // Fade the page relative to its size. 
      view.setAlpha(MIN_ALPHA + (scaleFactor - MIN_SCALE) 
        /(1 - MIN_SCALE) * (1 - MIN_ALPHA)); 

     } else { // (1,+Infinity] 
      // This page is way off-screen to the right. 
      view.setAlpha(0); 
     } 
    } 
} 
0

Chỉ cần thêm biên dịch 'com.android.support:support-v13:23.1.1' để phụ thuộc trong build.gradle (Screenshot)

Các vấn đề liên quan