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


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











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值