当前位置: 首页 > 知识库问答 >
问题:

在viewpager android中的视图上翻转动画

阳文轩
2023-03-14

我已经尝试了一段时间,但我不能旋转片段视图,这是在一个视页。单击是在ViewPager的父片段的视图上。我一直得到空指针异常。我已经在我得到异常的代码行上面注释了。

主片段

     int item = mViewPager.getCurrentItem();
            Fragment frag = (Fragment) mSectionsPagerAdapter.getItem(item);
            final View containers = frag.getView();
            rootView.findViewById(R.id.flipCard).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(getActivity().getApplicationContext(), "Working ", Toast.LENGTH_SHORT).show();
//**Exception at below line**
                    View rootLayout = (View) containers.findViewById(R.id.card_view);

                    View cardFace = (View) containers.findViewById(R.id.mainLayout);
                    View cardBack = (View) containers.findViewById(R.id.mainLayout2);
                    if (cardFace == null || cardBack == null) {
                        Toast.makeText(getActivity().getApplicationContext(), "Null View", Toast.LENGTH_SHORT).show();
                    }
                    FlipAnimation flipAnimation = new FlipAnimation(cardFace, cardBack);

                    if (cardFace.getVisibility() == View.GONE) {
                        flipAnimation.reverse();
                    }
                    rootLayout.startAnimation(flipAnimation);
                }
            });
public class FlipAnimation extends Animation {
    private Camera camera;

    private View fromView;
    private View toView;

    private float centerX;
    private float centerY;

    private boolean forward = true;

    /**
     * Creates a 3D flip animation between two views.
     *
     * @param fromView First view in the transition.
     * @param toView   Second view in the transition.
     */
    public FlipAnimation(View fromView, View toView) {
        this.fromView = fromView;
        this.toView = toView;

        setDuration(700);
        setFillAfter(false);
        setInterpolator(new AccelerateDecelerateInterpolator());
    }

    public void reverse() {
        forward = false;
        View switchView = toView;
        toView = fromView;
        fromView = switchView;
    }

    @Override
    public void initialize(int width, int height, int parentWidth, int parentHeight) {
        super.initialize(width, height, parentWidth, parentHeight);
        centerX = width / 2;
        centerY = height / 2;
        camera = new Camera();
    }

    @Override
    protected void applyTransformation(float interpolatedTime, Transformation t) {
        // Angle around the y-axis of the rotation at the given time
        // calculated both in radians and degrees.
        final double radians = Math.PI * interpolatedTime;
        float degrees = (float) (180.0 * radians / Math.PI);

        // Once we reach the midpoint in the animation, we need to hide the
        // source view and show the destination view. We also need to change
        // the angle by 180 degrees so that the destination does not come in
        // flipped around
        if (interpolatedTime >= 0.5f) {
            degrees -= 180.f;
            fromView.setVisibility(View.GONE);
            toView.setVisibility(View.VISIBLE);
        }

        if (forward)
            degrees = -degrees; //determines direction of rotation when flip begins

        final Matrix matrix = t.getMatrix();
        camera.save();
        camera.rotateY(degrees);
        camera.getMatrix(matrix);
        camera.restore();
        matrix.preTranslate(-centerX, -centerY);
        matrix.postTranslate(centerX, centerY);
    }
}

共有1个答案

汪典
2023-03-14

将此代码放入片段的oncreateView中,以防万一,这样就不需要调用frag.getview(),在您的情况下,它返回null。

 类似资料:
  • iPad版腾讯视频翻转显示影片详情动画,path里也用到这个动画,用户点击列表上面某张缩略图片,图片翻转变大之后显示详情。动画效果请看视频。 [Code4App.com]

  • 主要内容:本节引言:,1.为ViewFlipper加入View的两种方法,2.常用的一些方法,3.使用实例,4.代码示例下载,本节小结:本节引言: 本节给大家带了的是ViewFlipper,它是Android自带的一个多页面管理控件,且可以自动播放! 和ViewPager不同,ViewPager是一页页的,而ViewFlipper则是一层层的,和ViewPager一样,很多时候, 用来实现进入应用后的引导页,或者用于图片轮播,本节我们就使用ViewFlipper写一个简单的图片 轮播的例子吧~官

  • 本文向大家介绍Android ViewFlipper翻转视图使用详解,包括了Android ViewFlipper翻转视图使用详解的使用技巧和注意事项,需要的朋友参考一下 简介 ViewFlipper是Android自带的一个多页面管理控件且可以自动播放!它和ViewPager有所不同,ViewPager继承自ViewGroup,是一页一页的,可以带动画效果,可以兼容低版本;而ViewFlippe

  • 我正在编写一个绘图应用程序,我不希望绘图视图旋转。同时,我希望其他控件根据设备的方向很好地旋转。在iOS7中,我通过以下方式解决了这个问题: 但在iOS 8上,即使调用了该函数并正确设置了变换,也不会阻止视图旋转。 我尝试过创建一个视图控制器,它可以简单地防止视图的旋转并将其视图添加到视图层次结构中,但它不会响应用户输入。 有什么想法吗? 谢谢

  • 问题内容: 我正在尝试旋转/翻转已经位于Google Cloud Storage内部的图像。 这是Blobkey: 然后,我检索图像并应用图像变换: 我可以使用以下方式在字节数组中获取RAW图像数据: 直接使用GCS,我可以将其写入云存储服务: 在本地,我可以看到旋转的图像位于appengine生成的文件夹中,如何获取新的服务url或objectName应该是什么以覆盖原始图像?objectNam

  • 这就是它没有覆盖原始内容的原因。我猜是我创建的文件名不正确,还是我创建的GcsOutputChannel正在更改路径?我也很好奇为什么我得到的是原始图像的url而不是新图像的url? 如果我拆分原始的GcsFileName并只取最后一部分,我将得到一个错误: Google存储文件名必须以/gs/为前缀 解决方案 使用以下方法检索blobKey: ...即使FileName.getObjectNam