您的位置:首页 > 运维架构

ActivityOptionsCompat 转场动画 Palette 颜色拾取学习

2017-12-14 17:57 603 查看
ActivityOptionsCompat 转场动画 Palette 颜色拾取学习





本项目来自:https://github.com/WorldPeaceTogether/MaterialDesign

首先图片上的第一个场景

public class MainActivity extends AppCompatActivity implements ImageRecyAdapter.OnItemClickListener

单个图片点击后,R.id.image指向图片view,ViewModel里边是数据

@Override
public void onItemClick(View view, ViewModel viewModel) {
DetailActivity.navigate(this, view.findViewById(R.id.image), viewModel);
}


====》

跳转到了第二个场景

public class DetailActivity extends AppCompatActivity


上边的跳转位置

public static void navigate(AppCompatActivity activity, View transitionImage, ViewModel viewModel) {
Intent intent = new Intent(activity, DetailActivity.class);
intent.putExtra(EXTRA_IMAGE, viewModel.getImage());
//intent.putExtra(EXTRA_TITLE, viewModel.getText());
//Log.e("DetailActivity:",viewModel.getImage()+"");
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, transitionImage, EXTRA_IMAGE);
ActivityCompat.startActivity(activity, intent, options.toBundle());
}

补充,EXTRA_IMAGE是转场key

public static final String EXTRA_IMAGE = "com.antonioleiva.materializeyourapp.extraImage";


到了这个场景二后,

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initActivityTransitions();
setContentView(R.layout.activity_details);
ButterKnife.bind(this);
initData();
}

初始化数据时,设置了转场呼应的转换key配置

public void initData() {
ViewCompat.setTransitionName(findViewById(R.id.app_bar_layout), EXTRA_IMAGE);
supportPostponeEnterTransition();
setSupportActionBar((Toolbar) findViewById(R.id.toolbar));
}

设置窗体滑动透明度等,发现去掉影响效果不明确

private void initActivityTransitions() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Slide transition = new Slide();
transition.excludeTarget(android.R.id.statusBarBackground, true);
getWindow().setEnterTransition(transition);
getWindow().setReturnTransition(transition);
}
}


================================================================

下边是Palette的颜色根据bitmap提取类的例子

public void initData() {
//image.setImageURI(Uri.parse(getIntent().getStringExtra(EXTRA_IMAGE)));
Picasso.with(this).load(getIntent().getStringExtra(EXTRA_IMAGE)).into(image, new Callback() {
@Override
public void onSuccess() {
Bitmap bitmap = ((BitmapDrawable) image.getDrawable()).getBitmap();
Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
public void onGenerated(Palette palette) {
applyPalette(palette);
}
});
}

@Override
public void onError() {

}
});
/* Bitmap bitmap = image.getDrawingCache();

Palette.from(bitmap).generate(new Palette.PaletteAsyncListener() {
public void onGenerated(Palette palette) {
applyPalette(palette);
}
});*/
ViewCompat.setTransitionName(findViewById(R.id.app_bar_layout), EXTRA_IMAGE);
supportPostponeEnterTransition();
setSupportActionBar((Toolbar) findViewById(R.id.toolbar));
}


private void applyPalette(Palette palette) {
int primaryDark = getResources().getColor(R.color.primary_dark);
int primary = getResources().getColor(R.color.primary);
collapsingToolbar.setContentScrimColor(palette.getMutedColor(primary));
collapsingToolbar.setStatusBarScrimColor(palette.getDarkMutedColor(primaryDark));
updateBackground((FloatingActionButton) findViewById(R.id.fab), palette);
supportStartPostponedEnterTransition();
}

private void updateBackground(FloatingActionButton fab, Palette palette) {
int lightVibrantColor = palette.getLightVibrantColor(getResources().getColor(android.R.color.white));
int vibrantColor = palette.getVibrantColor(getResources().getColor(R.color.accent));

fab.setRippleColor(lightVibrantColor);
fab.setBackgroundTintList(ColorStateList.valueOf(vibrantColor));
}


Palette 学习介绍:http://blog.csdn.net/lablenet/article/details/52340634
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: