android朋友圈动态视频,Android实现微信朋友圈图片和视频播放
本文实例为大家分享了Android实现微信朋友圈图片和视频播放的具体代码,供大家参考,具体内容如下
1.效果图:
2.源码地址:链接
3.参数控制,是否显示播放按钮
holder.layout.setIsShowAll(mList.get(position).isShowAll);
holder.layout.setIsVideo(true); //true :video, false :img
holder.layout.setUrlList(mList.get(position).urlList);
4.自定义控件:
package com.example.mepositry.view;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
import android.support.v7.widget.AppCompatImageView;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.ViewGroup;
import com.example.mepositry.R;
//根据宽高比例自动计算高度ImageView
public class RatioImageView extends AppCompatImageView {
private int playBtnRes = R.mipmap.play_btn_video;
private Bitmap playBtnBitmap;
private boolean type; //true表示video
private int i; //i图片id
private String url; //url图片地址
private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
Rect src = new Rect();
RectF dest = new RectF();
//* 宽高比例
private float mRatio = 0f;
public RatioImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public RatioImageView(Context context, AttributeSet attrs) {
super(context, attrs);
/* TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.RatioImageView);
playBtnRes = typedArray.getResourceId(R.styleable.ImageViewPlay_ivp_play_btn_res, playBtnRes);
playBtnBitmap = BitmapFactory.decodeResource(getResources(), playBtnRes);
mRatio = typedArray.getFloat(R.styleable.RatioImageView_ratio, 0f);
typedArray.recycle();*/
}
public RatioImageView(Context context) {
super(context);
TypedArray typedArray = context.obtainStyledAttributes(R.styleable.RatioImageView);
playBtnRes = typedArray.getResourceId(R.styleable.ImageViewPlay_ivp_play_btn_res, playBtnRes);
playBtnBitmap = BitmapFactory.decodeResource(getResources(), playBtnRes);
mRatio = typedArray.getFloat(R.styleable.RatioImageView_ratio, 0f);
typedArray.recycle();
}
//*description: 设置图片类型,如果是TYPE_IMAGE,显示图片,如果是TYPE_VIDEO,显示图片,并且在图片正中心绘制一个播放按钮
public void setType(boolean type, int i, String url){
this.type = type;
this.i = i;
this.url = url;
}
//设置ImageView的宽高比
public void setRatio(float ratio) {
mRatio = ratio;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if(type){
//如果是true,显示图片,并且在图片正中心绘制一个播放按钮
Drawable drawable = getDrawable();
if (drawable != null) {
int viewW = drawable.getIntrinsicWidth(); //获取图片的宽
int viewH = drawable.getIntrinsicHeight(); //获取图片的高
int btnW = playBtnBitmap.getWidth(); //获取播放按钮的宽
int btnH = playBtnBitmap.getHeight(); //获取播放按钮的高
float[] result = measureViewSize(viewW, viewH);
if(result[0] > 0 && result[1] > 0){ //先根据比例缩放图标,确保绘制的时候再次回归缩放,保持播放的图片大小不变
btnW *= (viewW / result[0]);
btnH *= (viewH / result[1]);
}
float left = (viewW - btnW) / 2.0f;
float top = (viewH - btnH) / 2.0f;
src.set(0, 0, btnW, btnH);
dest.set(left, top, left+btnW, top+btnH);
canvas.save();
canvas.concat(getImageMatrix());
canvas.drawBitmap(playBtnBitmap, src, dest, mPaint);
canvas.restore();
}
}
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int width = MeasureSpec.getSize(widthMeasureSpec);
Drawable drawable = getDrawable();
if (drawable != null) { //重新计算view
int viewW = drawable.getIntrinsicWidth();
int viewH = drawable.getIntrinsicHeight();
if(viewW > 0 && viewH > 0) {
float[] result = measureViewSize(viewW, viewH);
setMeasuredDimension((int)result[0], (int) result[1]);
}
}
if (mRatio != 0) {
float height = width / mRatio;
heightMeasureSpec = MeasureSpec.makeMeasureSpec((int) height, MeasureSpec.EXACTLY);
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Drawable drawable = getDrawable();
if (drawable != null) {
drawable.mutate().setColorFilter(Color.GRAY,
PorterDuff.Mode.MULTIPLY);
}
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
Drawable drawableUp = getDrawable();
if (drawableUp != null) {
drawableUp.mutate().clearColorFilter();
}
break;
}
return super.onTouchEvent(event);
}
// *description: 根据传入的图片宽高,计算出最终的imageview的宽高,长宽等比缩放
private float[] measureViewSize(int w, int h) {
ViewGroup.LayoutParams lp = getLayoutParams();
float maxW = lp.width;
float maxH = lp.height;
float showWidth = w;
float showHeight = h;
float scale = (1.0f * maxW) / maxH;
float s = 1.0f * w / h;
if (w < maxW && h < maxH) { //不进行缩放
showWidth = w;
showHeight = h;
} else if (s > scale) { //宽取最大,高进行缩小
showWidth = maxW;
showHeight = (int) (h * (showWidth * 1.0 / w));
} else if (s <= scale) {//高取最大,宽进行缩小
showHeight = maxH;
showWidth = (int) (w * (showHeight * 1.0 / h));
}
float[] result = new float[2];
result[0] = showWidth;
result[1] = showHeight;
return result;
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
android朋友圈动态视频,Android实现微信朋友圈图片和视频播放相关推荐
- 企业微信应用设置可信域名_怎么设置企业微信朋友圈功能?企业微信朋友圈功能有哪些限制?...
文丨 @语鹦企服私域管家 原创,本文为<企业微信私域流量玩法>专栏第24篇 有小伙伴给小企留言说:企业微信朋友圈功能开放了,请问怎么设置企业微信朋友圈功能?企业微信朋友圈功能有哪些限制? ...
- 微信朋友圈装x代码_朋友圈生成器有哪些_微信朋友圈生成器大全_微信朋友圈装逼生成器下载_飞翔软件专题...
微信朋友圈生成器是小伙伴日常朋友圈装逼的必备工具.本次小编为大家带来多款朋友圈装b生成器,支持各种豪车,驾驶证,房产证等装逼图片的生成.微信朋友圈装b生成器可以帮助用户好好的装逼,装出全新的高度.相信 ...
- android朋友圈动态视频,安卓版微信7.0.5尝鲜,朋友圈可发30秒视频,网友最爱的功能是?...
原标题:安卓版微信7.0.5尝鲜,朋友圈可发30秒视频,网友最爱的功能是? 微信现在已经是成为人们每天最常使用的聊天工具之一,因此微信的每一次更新和变化都会引起人们的注意.这不,安卓版的微信又悄悄推出 ...
- android微信朋友圈视频无法播放,微信朋友圈不能分享手机视频怎么回事?微信朋友圈大视频功能安卓不能用吗?...
微信朋友圈不能分享手机视频怎么回事?微信朋友圈大视频功能安卓不能用吗?最近微信更新,用户可以进行分享自己手机里的视频,这一举措受到很多人的喜欢.那么微信朋友圈不能分享手机视频怎么回事?微信朋友圈大视频 ...
- android导出微信朋友圈怎么发文字,微信朋友圈怎么发纯文字?看完这篇文章,你就知道该怎么操作了...
经常使用微信聊天的朋友,一定会发现明明微信朋友圈只支持发视频或图片,然后配文字发送,为什么有些人的朋友圈可以发送纯文字呢?本期文章就教教大家如何使用微信"发纯文字"的朋友圈. 以安 ...
- 拼多多分享好友砍价Java实现_拼多多砍价怎么分享到朋友圈 砍价发到微信朋友圈方法...
拼多多是一款电商+社交的共享式购物平台,现在还推出了砍价的活动,只要邀请好友砍价,你就以最低的价格购买商品,还可以可能是免费拿到,那么今天小编就给大家讲讲如何将自己的砍价信息分享到微信朋友圈. 首先下 ...
- 微信朋友圈 html 字体颜色,微信朋友圈怎么发文字,朋友圈字体颜色可以改吗?...
1大片资源平台.先不要急着进入微信,先打开手机当中的应用商店,在搜索框中输入[炫字体],如下图所示. 2.输入后点击搜索按钮,点击第一个炫酷字体,然后点击下方下载安装图标红娘网7651.这样,炫酷字体 ...
- 微信朋友圈在服务器多久刷新,官方回复微信朋友圈不能刷新为什么微信朋友圈不能刷新...
腾讯微信团队发表声明称,一些用户的朋友圈无法刷新,正在紧急修复中. 腾讯微信团队发表声明称,一些用户的朋友圈无法刷新,正在紧急修复中. 对此,腾讯微信团队表示,"一些用户的朋友圈无法刷新,我 ...
- 微信朋友圈html5广告,关于微信朋友圈广告的H5页面制作de注意事项
其实官方文档已经写得很清楚了,记得不要用es6哈~ 微信开发规范.目录规范 项目初始化设置(微信提供 找项目负责人) 1 项目别名 (创建目录的名称,添加统计时的别名) 例:"2016121 ...
- 微信朋友圈php主题,有关微信朋友圈的文章推荐10篇
这篇文章主要介绍了.Net语言Smobiler开发平台如何仿微信朋友圈的消息样式?本文为大家揭晓答案最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xama ...
最新文章
- Vue3 核心技能从入门到难点攻破,看这一篇就够了!
- python3学习笔记10(迭代器和生成器)
- FreeRTOS 任务间同步和通信方法
- 算法训练营 重编码_关于如何在没有训练营的情况下学习编码的10条提示
- Python爬虫扩展库BeautifulSoup4用法精要
- ASP.NET Core 新建项目 - macOS 环境 - ASP.NET Core 基础教程 - 简单教程,简单编程
- 关联分析(一)--Apriori算法
- 一种支持多种流媒体协议的播放内核
- 网吧服务器是起什么作用的,网吧服务器的用途是什么?
- http://www.baidu.com/cb.php?,帮助文档首页/百度翻译
- 陈计老师《代数不等式》p15例6的别证
- PyG利用MessagePassing搭建GCN实现节点分类
- windows修改IP命令/脚本
- CCF关于举办2019年NOI教师培训(首师附中)的通知
- 机器学习常见求逆矩阵的方法
- VDA6.5认证咨询,产品审核与其他审核方式及检验的区别
- RockChip Android平台抓取android trace的windows环境搭建
- 采用面向对象的方法来实现留言板的添加和删除功能
- icloud安装错误怎么办_怎么办?iCloud云备份失败该如何解决?
- 关于bool operator< (const Edge W)const
热门文章
- php 跨站脚本攻击漏洞,PHP跨站脚本攻击(XSS)漏洞修复思路(二)
- NeHe OpenGL系列教程(中英文版附带VC++源码)中英文系列
- COSTDOWN版本的NRF51802和NRF51822的复位问题
- 查看网络连接的netstat命令
- 运行服务器(Tomcat)但是到JDBC这一步,一直报错java.lang.NoClassDefFoundError: Could not initialize class DruidDemo
- 软件工程测试题(雨课堂学堂在线选择题汇总)
- 大数据十年:Cloudera向左,Palantir向右
- 红外线体温计详细制作方案
- Element-Ui 双重el-tabs组件选中第二层时,刷新导致第一层选中样式丢失问题以及解决方法
- 苹果手机热点连上不能上网_「手机自学维修教程」苹果6plus手机屏幕触摸不能用的通病分析...