1.效果图:

2.源码地址:

https://github.com/wrs13634194612/FriendsVideo

3.参数控制,是否显示播放按钮

    holder.layout.setIsShowAll(mList.get(position).isShowAll);holder.layout.setIsVideo(true); //true :video, false :imgholder.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;//根据宽高比例自动计算高度ImageViewpublic class RatioImageView extends AppCompatImageView {private int playBtnRes = R.mipmap.play_btn_video;private Bitmap playBtnBitmap;private boolean type; //true表示videoprivate int i; //i图片idprivate 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;}@Overrideprotected 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();}}}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {int width = MeasureSpec.getSize(widthMeasureSpec);Drawable drawable = getDrawable();if (drawable != null) { //重新计算viewint 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);}@Overridepublic 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;}}

end

仿微信朋友圈图片和视频播放相关推荐

  1. Android仿微信朋友圈图片上传选择器布局

    标题有点绕口,直接上一个效果图,如果符合你的需求的请在往下看,避免浪费你的时间 当当当当,标红的区域就是今天我们要干的活了 ,搞起来! 思路: 对android有点了解的人都知道在列表显示中我们可以使 ...

  2. 安卓开发仿微信图片拖拽_Android仿微信朋友圈图片浏览器(支持图片手势缩放,拖动)...

    [实例简介] Android仿微信朋友圈图片浏览器(支持图片手势缩放,拖动) [实例截图] [核心代码] ImageDemo-2014-02-18 └── ImageDemo-2014-02-18 ├ ...

  3. Android仿微信朋友圈图片展示效果,图片查看器

    现在越来越多的APP都会有图片展示,这里是模仿微信朋友圈图片展示效果,图片查看器. 主要分为4部分: 1.透明Activity 2.计算gridView下iamgeView Item所在位置 3.一张 ...

  4. 仿微信朋友圈图片上传

    先贴上地址 项目地址 介绍 仿微信朋友圈的图片上传,图片上传缓存,断网后重新连接网络或者APP重启,自动上传未上传的图片 Config的阿里云配置需要自己添加 public class Config ...

  5. RN仿微信朋友圈图片拖拽删除

    目录 前言 初始时 渲染时 开始拖拽 拖拽中 拖拽结束 拖拽删除 参考链接 前言 之前负责的一个需求,让在RN端做仿微信朋友圈的图片删除和排序,由于经验和时间限制,就跟PM协商改为点击删除,由此欠下一 ...

  6. 安卓开发仿微信图片拖拽_Android 仿微信朋友圈图片拖拽返回

    目前的app的动画效果是越来越炫了,很多主流app的图片预览返回都有类似功能,比较常见的是ios自带相册,微信朋友圈等等.自己项目中也有类似功能,最近整理了一下这个功能的代码,做个笔记记录,有兴趣的朋 ...

  7. Android仿微信朋友圈图片查看器

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/40264551 看博文之前,希望大家先打开自己的微信点到朋友圈中去,仔细观察是不是发 ...

  8. Android仿微信朋友圈图片打开退出过渡动画

    大家好,最近又是不断地改需求,终于闲下来了.看到微信朋友圈的图片打开退出的过渡动画,正好我们项目中也有类似功能,但是转换效果干巴巴的,麻麻赖赖的,一点都不圆润.没关系,盘他!先来看我实现的效果: 实现 ...

  9. android 高仿朋友圈title,Android之高仿微信朋友圈图片上传

    碰到过很多上传图片的功能,大多都是要求是仿微信,不论是单图还是多图,更不知道是出于什么原因要去仿微信,总之,作为开发人员,很无奈,今天就把这种需求总结出来了,方便以后使用,下面就开始撸...... 一 ...

最新文章

  1. java 中的 Annotation 注解学习笔记
  2. DEDECMS v5.5 GBK Final 的一个鸡肋漏洞
  3. vue图片点击超链接_vue使用v-for实现hover点击效果
  4. yum 错误:Invalid configuration value: failovermethod=priority
  5. Java基础学习总结 -- 图形用户界面GUI
  6. calendar获取月份少一个月_VBA 技巧:计算一个月有多少天?
  7. 如何将各种电子书格式转换为PDF格式
  8. heka 0.11.0源码分析--Elasticsearch OutPut插件
  9. uniapp之安卓使用高德地图
  10. mand-mobile 组件库 tab-bar组件滚动问题
  11. 《地球概论》(第3版)笔记 第四章 地球运动的地理意义
  12. 转:授之于鱼还是授之以渔,金蝶给了企业SaaS一个完整答案
  13. DBveaver的一些使用心得
  14. 金融分析与风险管理——资本资产定价模型
  15. 2021年全球及中国天然橡胶产量、消费量及价格走势分析:中国市场需求量急速增涨[图]
  16. 全志T3开发板——嵌入式入门学习测试教程(4)
  17. 齿轮系统动力学模型matlab程序代码
  18. POJ 3084 Panic Room | 最小割
  19. MySQL备份系列--备份方案总结性梳理
  20. 语音识别入门第二节:语音信号处理及特征提取

热门文章

  1. 如果我恨一个人,我就领他到中关村买相机。
  2. 从unity到unreal4 虚幻4学习笔记 一 : ue4与vs studio、vs code开发环境的安装与配置
  3. 一般将来时语法课教案_【语法视频课】第1~50节资料汇总
  4. 【年度总结】继往开来:回首不靠谱的2021,希冀靠谱的2022
  5. 【matlab编程】Matlab版扫雷
  6. 浅谈知识表示之语义网络、RDF和OWL
  7. linux下创建用户分组及设置分组权限
  8. 医学影像工作站 v2.2 官方
  9. 什么是java?以及java的初步简单学习
  10. php 聚合广告平台,GitHub - mystudytime/easy-amazon-advertising: 基于 amazon advertising v2 接口的 PHP 广告信息组件...