Android学习之Android 5.0分享动画实现微信点击全屏效果
2016-04-15 20:14
260 查看
Android5.0过渡动画,请看
/article/7647767.html
今天用分享动画实现微信点击全屏效果
本文源码下载地址
http://pan.baidu.com/s/1dFbNZv7
peizhi
配置 build.gradle:
在主页添加RecylerView
初始化数据:
配置Adapter
详情页xml
效果图
主要是添加分享元素android:transitionName=”share”,在列表页和详情页的xml的ImageView布局文件中。
最终效果
本效果只支持API21+,大家要想实现这个效果的可以参考一下。
/article/7647767.html
今天用分享动画实现微信点击全屏效果
本文源码下载地址
http://pan.baidu.com/s/1dFbNZv7
peizhi
配置 build.gradle:
compile 'com.android.support:recyclerview-v7:23.3.0' compile 'com.squareup.picasso:picasso:2.3.2'
在主页添加RecylerView
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recyclerView = (RecyclerView) findViewById(R.id.recylerview); recyclerView.setHasFixedSize(true); recyclerView.setLayoutManager(new GridLayoutManager(this, 3)); recyclerView.setAdapter(adapter = new PicassoAdapter(this)); adapter.replaceAll(getData()); } private ArrayList<String> getData() { ArrayList<String> list = new ArrayList<>(); for (int i = 0; i < ImageUtil.imageUrls.length; i++) { list.add(ImageUtil.imageUrls[i]); } return list; }
初始化数据:
package com.example.wangchang.testpicasso; /** * Created by WangChang on 2016/4/3. */ public class ImageUtil { public final static String[] imageUrls = new String[]{ "http://img.my.csdn.net/uploads/201508/05/1438760758_3497.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760758_6667.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760757_3588.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760756_3304.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760755_6715.jpeg", "http://img.my.csdn.net/uploads/201508/05/1438760726_5120.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760726_8364.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760725_4031.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760724_9463.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760724_2371.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760707_4653.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760706_6864.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760706_9279.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760704_2341.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760704_5707.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760685_5091.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760685_4444.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760684_8827.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760683_3691.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760683_7315.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760663_7318.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760662_3454.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760662_5113.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760661_3305.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760661_7416.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760589_2946.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760589_1100.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760588_8297.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760587_2575.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760587_8906.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760550_2875.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760550_9517.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760549_7093.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760549_1352.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760548_2780.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760531_1776.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760531_1380.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760530_4944.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760530_5750.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760529_3289.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760500_7871.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760500_6063.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760499_6304.jpeg", "http://img.my.csdn.net/uploads/201508/05/1438760499_5081.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760498_7007.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760478_3128.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760478_6766.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760477_1358.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760477_3540.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760476_1240.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760446_7993.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760446_3641.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760445_3283.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760444_8623.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760444_6822.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760422_2224.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760421_2824.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760420_2660.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760420_7188.jpg", "http://img.my.csdn.net/uploads/201508/05/1438760419_4123.jpg", }; }
配置Adapter
package com.example.wangchang.testpicasso; import android.app.Activity; import android.app.ActivityOptions; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import com.squareup.picasso.Picasso; import com.squareup.picasso.Target; import com.squareup.picasso.Transformation; import java.util.ArrayList; /** * Created by WangChang on 2016/4/10. */ public class PicassoAdapter extends RecyclerView.Adapter<PicassoAdapter.BaseViewHolder> { private ArrayList<String> dataList = new ArrayList<>(); private Context context; public PicassoAdapter(Context context) { this.context = context; } public void replaceAll(ArrayList<String> list) { dataList.clear(); if (list != null) { dataList.addAll(list); } notifyDataSetChanged(); } @Override public PicassoAdapter.BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new ImageViewHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false)); } @Override public void onBindViewHolder(PicassoAdapter.BaseViewHolder holder, int position) { holder.setData(dataList.get(position)); } @Override public int getItemCount() { return dataList != null ? dataList.size() : 0; } public class BaseViewHolder extends RecyclerView.ViewHolder { public BaseViewHolder(View itemView) { super(itemView); } void setData(Object data) { } } private class ImageViewHolder extends BaseViewHolder implements Target { private ImageView imageView; public ImageViewHolder(View view) { super(view); imageView = (ImageView) view.findViewById(R.id.image); } @Override void setData(Object data) { super.setData(data); if (data != null) { final String path = (String) data; Picasso.with(itemView.getContext()).load(path).resize(200, 200).into(imageView); itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(itemView.getContext(), OtherActivity.class); intent.putExtra("flag", path); context.startActivity(intent, ActivityOptions.makeSceneTransitionAnimation((Activity) itemView.getContext(), v, "share").toBundle()); } }); } } @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { bitmap = new CropSquareTransformation().transform(bitmap); imageView.setImageBitmap(bitmap); } @Override public void onBitmapFailed(Drawable errorDrawable) { } @Override public void onPrepareLoad(Drawable placeHolderDrawable) { } } public class CropSquareTransformation implements Transformation { @Override public Bitmap transform(Bitmap source) { int size = Math.min(source.getWidth(), source.getHeight()); int x = (source.getWidth() - size) / 2; int y = (source.getHeight() - size) / 2; Bitmap result = Bitmap.createBitmap(source, x, y, size, size); if (result != source) { source.recycle(); } return result; } @Override public String key() { return "square()"; } } }
详情页xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ImageView android:id="@+id/iv_image" android:layout_width="200dp" android:layout_height="200dp" android:layout_gravity="center_horizontal" android:layout_marginTop="100dp" android:scaleType="fitXY" android:src="@mipmap/ic_launcher" android:transitionName="share" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="24dp" android:text="用户姓名" android:textSize="18sp" android:textStyle="bold" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="24dp" android:text="你是我的小呀小苹果,你是我的小呀小苹果,你是我的小呀小苹果,你是我的小呀小苹果你是我的小呀小苹果,你是我的小呀小苹果" /> </LinearLayout>
效果图
主要是添加分享元素android:transitionName=”share”,在列表页和详情页的xml的ImageView布局文件中。
最终效果
本效果只支持API21+,大家要想实现这个效果的可以参考一下。
相关文章推荐
- 微信移动客户端内部浏览器分享到朋友圈,QQ空间代码
- 微信开放平台开发(3) 移动应用微信登录
- 微信开放平台开发(3) 移动应用微信登录
- 微信开放平台开发(3) 移动应用微信登录
- 微信硬件蓝牙开发各种坑不完全开发指南
- iOS中 最新微信支付/最全的微信支付教程详解 韩俊强的博客
- iOS中 最新微信支付/最全的微信支付教程详解 韩俊强的博客
- 微信公众号开发小记——3.接入三方登录
- JS判断是否在微信浏览器打开
- iOS 微信第三方登录的简单实现
- 微信移动客户端内部浏览器分享到朋友圈,QQ空间代码
- Android小程序-Walker注册页面(三)
- 微信开发踩坑从服务器配置开始
- Android 第三方QQ、微信、微博登录分享
- 初学Java必写的小程序。
- 微信公众号开发地理位置坐标的转换
- 微信消息界面的实现
- C#开发微信门户及应用(1)--开始使用微信接口
- 听说微信红包有7种玩法,你知道的有几种?
- 微信公众平台开发——token验证失败