Java 与毕加索的共享元素转换即使在实现回调后也不起作用

Java 与毕加索的共享元素转换即使在实现回调后也不起作用,java,android,picasso,shared-element-transition,Java,Android,Picasso,Shared Element Transition,图像第一次完美地移动到它的位置,即细节活动图像视图,并且也完美地返回到主活动,但是当我下次单击同一图像时,转换动画将图像移动到错误的位置(太高)“细节”活动中的偏移,动画完成后,图像将显示为“扭曲”到正确的位置 以下是我的DetailActivity.java文件: package com.akshitjain.popularmovies; import android.content.Intent; import android.os.Build; import android.os.Bun

图像第一次完美地移动到它的位置,即细节活动图像视图,并且也完美地返回到主活动,但是当我下次单击同一图像时,转换动画将图像移动到错误的位置(太高)“细节”活动中的偏移,动画完成后,图像将显示为“扭曲”到正确的位置

以下是我的DetailActivity.java文件:

package com.akshitjain.popularmovies;

import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.ViewTreeObserver;
import android.widget.ImageView;
import android.widget.TextView;


import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso;

public class DetailActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_detail);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        postponeEnterTransition();
    }

    ImageView backdropImageView = (ImageView)       findViewById(R.id.detail_image_view);
    final ImageView posterImageView = (ImageView) findViewById(R.id.detail_poster);
    TextView overviewTextView = (TextView) findViewById(R.id.overview_text_view);
    TextView releaseDateTextView = (TextView) findViewById(R.id.release_date);
    TextView userRatingTextView = (TextView) findViewById(R.id.user_rating);
    TextView genreTextView = (TextView) findViewById(R.id.genre);
    genreTextView.setText("");
    Genre genreObject = new Genre();
    String genreName;

    Intent intent = getIntent();

    if (intent != null && intent.hasExtra(Constants.MOVIE_OBJECT_PARCELABLE_EXTRA)) {
        Movies movies = intent.getParcelableExtra(Constants.MOVIE_OBJECT_PARCELABLE_EXTRA);
        int[] genre;
        genre = movies.genre;
        for (int i = 0; i < genre.length; ++i) {
            genreName = genreObject.getGenreName(genre[i]);
            genreTextView.append(genreName);
            if (i < genre.length - 1) {
                genreTextView.append(", ");
            }
        }

        setTitle(movies.originalTitle);
        Picasso.with(getApplicationContext())
                .load((Constants.IMAGE_BASE_URL + Constants.POSTER_SIZE_LARGE).trim() + movies.backdropPath)
                .into(backdropImageView);
        Picasso.with(getApplicationContext())
                .load((Constants.IMAGE_BASE_URL + Constants.POSTER_SIZE_SMALL).trim() + movies.posterPath)
                .into(posterImageView, new Callback() {
                            @Override
                            public void onSuccess() {
                                posterImageView.getViewTreeObserver().addOnPreDrawListener(
                                        new ViewTreeObserver.OnPreDrawListener() {
                                            @Override
                                            public boolean onPreDraw() {
                                                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                                                    posterImageView.getViewTreeObserver().removeOnPreDrawListener(this);
                                                    startPostponedEnterTransition();
                                                }
                                                return true;
                                            }
                                        }

                                );
                            }

                            @Override
                            public void onError() {
                            }
                        }

                );
        overviewTextView.setText(movies.overview);
        releaseDateTextView.setText(movies.releaseDate);
        userRatingTextView.setText(movies.userRating);
    }

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_detail, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    switch (id) {
        case android.R.id.home:
            supportFinishAfterTransition();
            return true;
        case R.id.action_settings:
            return true;
    }
    return super.onOptionsItemSelected(item);
}
}
package com.akshitjain.popularmovies;
导入android.content.Intent;
导入android.os.Build;
导入android.os.Bundle;
导入android.support.v7.app.AppActivity;
导入android.support.v7.widget.Toolbar;
导入android.view.Menu;
导入android.view.MenuItem;
导入android.view.ViewTreeObserver;
导入android.widget.ImageView;
导入android.widget.TextView;
导入com.squareup.picasso.Callback;
导入com.squareup.picasso.picasso;
公共类DetailActivity扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_详细信息);
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.LOLLIPOP){
推迟过渡();
}
ImageView backdropImageView=(ImageView)findViewById(R.id.detail\u image\u view);
最终ImageView posterImageView=(ImageView)findViewById(R.id.detail_海报);
TextView概览TextView=(TextView)findViewById(R.id.overview\u text\u view);
TextView releaseDateTextView=(TextView)findViewById(R.id.release\u date);
TextView userRatingTextView=(TextView)findViewById(R.id.user\u rating);
TextView genreTextView=(TextView)findViewById(R.id.genre);
genreTextView.setText(“”);
流派genreObject=新流派();
字符串更名;
Intent=getIntent();
if(intent!=null&&intent.hasExtra(Constants.MOVIE\u OBJECT\u PARCELABLE\u EXTRA)){
Movies Movies=intent.getParcelableExtra(常量.MOVIE\u OBJECT\u ParcelableExtra);
int[]体裁;
流派=电影。流派;
对于(int i=0;i=Build.VERSION\u code.LOLLIPOP){
posterImageView.getViewTreeObserver().removeOnPreDrawListener(此);
startPostponedEnterTransition();
}
返回true;
}
}
);
}
@凌驾
公开无效{
}
}
);
概述text.setText(movies.overview);
releaseDateTextView.setText(movies.releaseDate);
userRatingTextView.setText(movies.userRating);
}
Toolbar Toolbar=(Toolbar)findViewById(R.id.Toolbar);
设置支持操作栏(工具栏);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(右菜单菜单详细信息,菜单);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//处理操作栏项目单击此处。操作栏将
//自动处理Home/Up按钮上的点击,只要
//在AndroidManifest.xml中指定父活动时。
int id=item.getItemId();
开关(id){
案例android.R.id.home:
支持FinishAfterTransition();
返回true;
案例R.id.action\u设置:
返回true;
}
返回super.onOptionsItemSelected(项目);
}
}
试试这个

posterImageView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            Picasso.with(getApplicationContext())
            .load((Constants.IMAGE_BASE_URL + Constants.POSTER_SIZE_SMALL).trim() + movies.posterPath)
            .into(posterImageView, new Callback() {
                        @Override
                        public void onSuccess() {
                             startPostponedEnterTransition();
                        }

                        @Override
                        public void onError() {
                        }
                    });
        }
}

很抱歉,我仍然有同样的问题。这与画布不透明度有关吗?你能发布一个视频链接吗