Java 与毕加索的共享元素转换即使在实现回调后也不起作用
图像第一次完美地移动到它的位置,即细节活动图像视图,并且也完美地返回到主活动,但是当我下次单击同一图像时,转换动画将图像移动到错误的位置(太高)“细节”活动中的偏移,动画完成后,图像将显示为“扭曲”到正确的位置 以下是我的DetailActivity.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
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() {
}
});
}
}
很抱歉,我仍然有同样的问题。这与画布不透明度有关吗?你能发布一个视频链接吗