2012-11-06 2 views
2

Android View Pager에서 큐브 전환 효과 애니메이션을 구현하고 싶습니다.큐브를 구현하는 방법 안드로이드에서 ViewPager에 전환 효과 애니메이션?

누구나 안드로이드에서 큐브 애니메이션에 대한 아이디어를 얻을 수 있습니다.

enter image description here

이미지 예를 들어 첨부되어 있습니다.

+0

중복 가능성 (http://stackoverflow.com/questions/5339907/3d-cube-transition-in-android) – devnull

+0

당신의 질문에 대한 해답을 얻었습니까? – saikrupa

답변

7

체크 아웃 here

스냅 샷 : 라이브러리 및 관련 소스 코드를 볼 수 있습니다

enter image description here

.

MainActivity.java :

package com.ToxicBakery.viewpager.transforms.example; 

import java.util.ArrayList; 

import android.app.ActionBar; 
import android.app.ActionBar.OnNavigationListener; 
import android.app.Activity; 
import android.app.Fragment; 
import android.app.FragmentManager; 
import android.os.Bundle; 
import android.support.v13.app.FragmentStatePagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.support.v4.view.ViewPager.PageTransformer; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 

import com.ToxicBakery.viewpager.transforms.AccordionTransformer; 
import com.ToxicBakery.viewpager.transforms.BackgroundToForegroundTransformer; 
import com.ToxicBakery.viewpager.transforms.CubeInTransformer; 
import com.ToxicBakery.viewpager.transforms.CubeOutTransformer; 
import com.ToxicBakery.viewpager.transforms.DefaultTransformer; 
import com.ToxicBakery.viewpager.transforms.DepthPageTransformer; 
import com.ToxicBakery.viewpager.transforms.FlipHorizontalTransformer; 
import com.ToxicBakery.viewpager.transforms.FlipVerticalTransformer; 
import com.ToxicBakery.viewpager.transforms.ForegroundToBackgroundTransformer; 
import com.ToxicBakery.viewpager.transforms.RotateDownTransformer; 
import com.ToxicBakery.viewpager.transforms.RotateUpTransformer; 
import com.ToxicBakery.viewpager.transforms.StackTransformer; 
import com.ToxicBakery.viewpager.transforms.TabletTransformer; 
import com.ToxicBakery.viewpager.transforms.ZoomInTransformer; 
import com.ToxicBakery.viewpager.transforms.ZoomOutSlideTransformer; 
import com.ToxicBakery.viewpager.transforms.ZoomOutTranformer; 
import com.ToxicBakery.viewpager.transforms.example.R; 

public class MainActivity extends Activity implements OnNavigationListener { 

    private static final String KEY_SELECTED_PAGE = "KEY_SELECTED_PAGE"; 
    private static final String KEY_SELECTED_CLASS = "KEY_SELECTED_CLASS"; 
    private static final ArrayList<TransformerItem> TRANSFORM_CLASSES; 

    static { 
     TRANSFORM_CLASSES = new ArrayList<TransformerItem>(); 
     TRANSFORM_CLASSES.add(new TransformerItem(DefaultTransformer.class)); 
     TRANSFORM_CLASSES.add(new TransformerItem(AccordionTransformer.class)); 
     TRANSFORM_CLASSES.add(new TransformerItem(BackgroundToForegroundTransformer.class)); 
     TRANSFORM_CLASSES.add(new TransformerItem(CubeInTransformer.class)); 
     TRANSFORM_CLASSES.add(new TransformerItem(CubeOutTransformer.class)); 
     TRANSFORM_CLASSES.add(new TransformerItem(DepthPageTransformer.class)); 
     TRANSFORM_CLASSES.add(new TransformerItem(FlipHorizontalTransformer.class)); 
     TRANSFORM_CLASSES.add(new TransformerItem(FlipVerticalTransformer.class)); 
     TRANSFORM_CLASSES.add(new TransformerItem(ForegroundToBackgroundTransformer.class)); 
     TRANSFORM_CLASSES.add(new TransformerItem(RotateDownTransformer.class)); 
     TRANSFORM_CLASSES.add(new TransformerItem(RotateUpTransformer.class)); 
     TRANSFORM_CLASSES.add(new TransformerItem(StackTransformer.class)); 
     TRANSFORM_CLASSES.add(new TransformerItem(TabletTransformer.class)); 
     TRANSFORM_CLASSES.add(new TransformerItem(ZoomInTransformer.class)); 
     TRANSFORM_CLASSES.add(new TransformerItem(ZoomOutSlideTransformer.class)); 
     TRANSFORM_CLASSES.add(new TransformerItem(ZoomOutTranformer.class)); 
    } 

    private int mSelectedItem; 
    private ViewPager mPager; 
    private PageAdapter mAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     int selectedPage = 0; 
     if (savedInstanceState != null) { 
      mSelectedItem = savedInstanceState.getInt(KEY_SELECTED_CLASS); 
      selectedPage = savedInstanceState.getInt(KEY_SELECTED_PAGE); 
     } 

     final ArrayAdapter<TransformerItem> actionBarAdapter = new ArrayAdapter<TransformerItem>(
       getApplicationContext(), android.R.layout.simple_list_item_1, android.R.id.text1, TRANSFORM_CLASSES); 

     final ActionBar actionBar = getActionBar(); 
     actionBar.setListNavigationCallbacks(actionBarAdapter, this); 
     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 

     //noinspection ResourceType 
     actionBar.setDisplayOptions(actionBar.getDisplayOptions()^ActionBar.DISPLAY_SHOW_TITLE); 

     setContentView(R.layout.activity_main); 

     mAdapter = new PageAdapter(getFragmentManager()); 

     mPager = (ViewPager) findViewById(R.id.container); 
     mPager.setAdapter(mAdapter); 
     mPager.setCurrentItem(selectedPage); 

     actionBar.setSelectedNavigationItem(mSelectedItem); 
    } 

    @Override 
    public boolean onNavigationItemSelected(int position, long itemId) { 
     mSelectedItem = position; 
     try { 
      mPager.setPageTransformer(true, TRANSFORM_CLASSES.get(position).clazz.newInstance()); 
     } catch (Exception e) { 
      throw new RuntimeException(e); 
     } 

     return true; 
    } 

    protected void onSaveInstanceState(Bundle outState) { 
     outState.putInt(KEY_SELECTED_CLASS, mSelectedItem); 
     outState.putInt(KEY_SELECTED_PAGE, mPager.getCurrentItem()); 
    } 

    public static class PlaceholderFragment extends Fragment { 

     private static final String EXTRA_POSITION = "EXTRA_POSITION"; 
     private static final int[] COLORS = new int[] { 0xFF33B5E5, 0xFFAA66CC, 0xFF99CC00, 0xFFFFBB33, 0xFFFF4444 }; 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      final int position = getArguments().getInt(EXTRA_POSITION); 
      final TextView textViewPosition = (TextView) inflater.inflate(R.layout.fragment_main, container, false); 
      textViewPosition.setText(Integer.toString(position)); 
      textViewPosition.setBackgroundColor(COLORS[position - 1]); 

      return textViewPosition; 
     } 

    } 

    private static final class PageAdapter extends FragmentStatePagerAdapter { 

     public PageAdapter(FragmentManager fragmentManager) { 
      super(fragmentManager); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      final Bundle bundle = new Bundle(); 
      bundle.putInt(PlaceholderFragment.EXTRA_POSITION, position + 1); 

      final PlaceholderFragment fragment = new PlaceholderFragment(); 
      fragment.setArguments(bundle); 

      return fragment; 
     } 

     @Override 
     public int getCount() { 
      return 5; 
     } 

    } 

    private static final class TransformerItem { 

     final String title; 
     final Class<? extends PageTransformer> clazz; 

     public TransformerItem(Class<? extends PageTransformer> clazz) { 
      this.clazz = clazz; 
      title = clazz.getSimpleName(); 
     } 

     @Override 
     public String toString() { 
      return title; 
     } 

    } 

} 
[안드로이드 3D 큐브 전이]의
+0

이 라이브러리를 사용하는 방법을 알려주세요. – saikrupa

+0

@saikrupa를 다운로드하여 스튜디오에서 가져옵니다. 그런 다음 실시간 프로젝트에 추가 할 항목이 무엇인지 확인하십시오. – Steve

+0

이것은 라이브러리 또는 일부 샘플 프로젝트입니다 – saikrupa

0

이러한 애니메이션을 수행하려면 카메라를 사용하십시오. ApiDemos에서 com.example.android.apis.animation.Transition3d를 읽으십시오.