当前位置: 首页 > news >正文

网站如何做原创网站建设服务费属于

网站如何做原创,网站建设服务费属于,直播app开发平台软件,应用界面设计Android Glide自定义AppCompatImageView切分成若干小格子#xff0c;每个小格子onDraw绘制Bitmap#xff0c;Kotlin#xff08;1#xff09; 垂直方向的RecyclerView#xff0c;每行一个AppCompatImageView#xff0c;每个AppCompatImageView被均匀切割成n个小格子#…Android Glide自定义AppCompatImageView切分成若干小格子每个小格子onDraw绘制BitmapKotlin1 垂直方向的RecyclerView每行一个AppCompatImageView每个AppCompatImageView被均匀切割成n个小格子 每个小格子通过Glide加载出来Bitmap然后onDraw绘制整行。 uses-permission android:nameandroid.permission.READ_EXTERNAL_STORAGE /uses-permission android:nameandroid.permission.READ_MEDIA_IMAGES / implementation(com.github.bumptech.glide:glide:4.16.0) import android.content.Context import android.os.Bundle import android.provider.MediaStore import android.util.Log import android.view.ViewGroup import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContextclass MainActivity : AppCompatActivity() {companion object {const val VIEW_TYPE 0const val TAG fly/MainActivity}override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)val rv findViewByIdRecyclerView(R.id.recycler_view)val layoutManager LinearLayoutManager(this)layoutManager.orientation LinearLayoutManager.VERTICALrv.layoutManager layoutManagerval adapter MyAdapter()rv.adapter adapterlifecycleScope.launch(Dispatchers.IO) {val items readAllImage(thisMainActivity)items.reverse()val data sliceDataList(items)withContext(Dispatchers.Main) {adapter.dataChanged(data)}}}private fun sliceDataList(data: ArrayListMyData): ArrayListArrayListMyData {var k: Intval lists ArrayListArrayListMyData()for (i in data.indices step BatchBitmapView.ROW_SIZE) {val temp ArrayListMyData()k 0for (j in 0 until BatchBitmapView.ROW_SIZE) {k i jif (k data.size) {break}temp.add(data[k])}lists.add(temp)}return lists}class MyAdapter : RecyclerView.AdapterMyVH() {private var items ArrayListArrayListMyData()fun dataChanged(items: ArrayListArrayListMyData) {this.items itemsnotifyDataSetChanged()}override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyVH {Log.d(TAG, onCreateViewHolder)val view BatchBitmapView(parent.context)return MyVH(view)}override fun getItemCount(): Int {return items.size}override fun getItemViewType(position: Int): Int {return VIEW_TYPE}override fun onBindViewHolder(holder: MyVH, position: Int) {Log.d(TAG, onBindViewHolder $position)val biv (holder.itemView as? BatchBitmapView)biv?.setRowBitmapData(items[position], position)}}class MyVH(itemView: BatchBitmapView) : RecyclerView.ViewHolder(itemView) {}class MyData(var path: String, var index: Int)private fun readAllImage(context: Context): ArrayListMyData {val photos ArrayListMyData()//读取所有图片val cursor context.contentResolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null, null)var index 0while (cursor!!.moveToNext()) {//路径 urival path cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA))//图片名称//val name cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME))//图片大小//val size cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.SIZE))photos.add(MyData(path, index))}cursor.close()return photos} } import android.content.Context import android.graphics.Bitmap import android.graphics.Canvas import android.graphics.drawable.Drawable import android.util.AttributeSet import android.util.Log import androidx.appcompat.widget.AppCompatImageView import com.bumptech.glide.Glide import com.bumptech.glide.request.target.CustomTarget import com.bumptech.glide.request.transition.Transitionclass BatchBitmapView JvmOverloads constructor(context: Context,attributeSet: AttributeSet? null,defStyleAttr: Int 0 ) : AppCompatImageView(context, attributeSet, defStyleAttr) {private val mData mutableListOfDataBean()private val mScreenWidth resources.displayMetrics.widthPixelsprivate val mTargets mutableListOfCustomTargetBitmap()companion object {const val TAG fly/BatchBitmapViewconst val ROW_SIZE 16 //一行多少个bitmapconst val IMAGE_SIZE 80 //每个小格子图片的尺寸}fun setRowBitmapData(rows: ArrayListMainActivity.MyData?, position: Int) {Log.d(TAG, setRowBitmapData $position)mData.clear()Log.d(TAG, mTargets.size${mTargets.size})mTargets.forEach {Glide.with(context).clear(it) //如果不清楚会发生有些图错放位置。}mTargets.clear() //mTargets上下滑动列表会越来越大清空一直保持ROW_SIZE.rows?.forEachIndexed { index, myData -val target object : CustomTargetBitmap() {override fun onResourceReady(resource: Bitmap, transition: Transitionin Bitmap?) {val bean DataBean(resource)mData.add(bean)postInvalidate()}override fun onLoadCleared(placeholder: Drawable?) {}}Glide.with(context).asBitmap().centerCrop().override(IMAGE_SIZE).load(myData.path).into(target)mTargets.add(target)}}override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {super.onMeasure(widthMeasureSpec, heightMeasureSpec)setMeasuredDimension(mScreenWidth, IMAGE_SIZE)}override fun onDraw(canvas: Canvas) {super.onDraw(canvas)mData.forEachIndexed { index, dataBean -canvas.save()var left (mScreenWidth / ROW_SIZE) * indexcanvas.drawBitmap(dataBean.bitmap, left.toFloat(), 0f, null)canvas.restore()}}data class DataBean(val bitmap: Bitmap) } 上面每一行加载16个bitmap绘图速度很快因为是canvas直接绘图。但是如果使用下文的方式 Android LinearLayout dynamic add child ImageViewGlide loadkotlin_zhangphil的博客-CSDN博客文章浏览阅读645次。【代码】Android Paging 3,kotlin1在实际的开发中虽然Glide解决了快速加载图片的问题但还有一个问题悬而未决比如用户的头像往往用户的头像是从服务器端读出的一个普通矩形图片但是现在的设计一般要求在APP端的用户头像显示成圆形头像那么此时虽然Glide可以加载但加载出来的是一个矩形如果要Glide_android 毛玻璃圆角。《Android图片加载与缓存开源框架Android Glide》Android Glide是一个开源的图片加载和缓存处理的第三方框架。https://blog.csdn.net/zhangphil/article/details/132080406即每一行先初始化一个水平的线性布局然后逐个添加16个ImageView对比发现明显卡顿因为是以ViewGroup的方式布局摆放子view形成View。 Android Glide CustomTarget ,kotlin-CSDN博客文章浏览阅读1.4k次。【代码】Android Paging 3,kotlin1在实际的开发中虽然Glide解决了快速加载图片的问题但还有一个问题悬而未决比如用户的头像往往用户的头像是从服务器端读出的一个普通矩形图片但是现在的设计一般要求在APP端的用户头像显示成圆形头像那么此时虽然Glide可以加载但加载出来的是一个矩形如果要Glide_android 毛玻璃圆角。《Android图片加载与缓存开源框架Android Glide》Android Glide是一个开源的图片加载和缓存处理的第三方框架。https://blog.csdn.net/zhangphil/article/details/131661819
http://www.zqtcl.cn/news/166028/

相关文章:

  • 北滘网站建设公司在百度上做网站怎么做
  • 合肥网站建设 毅耘园林设计网站大全
  • 免费备案网站空间爱营销app
  • 郑州网站建设公网站建设需要步骤
  • 源创派网站建设做软件赚钱的网站有哪些
  • 中英文网站建设公司推广引流
  • 网站改域名百度热词指数
  • 网站开发工程师工作内容网站源码是用什么做的
  • 做网站优化费用免费的视频网站如何赚钱
  • 如何制作一个好网站中国建设银行网站暑假工报名
  • 阿里巴巴做网站找谁网站建设需要ui吗
  • 如何评价伊利集团网站建设长沙专业竞价优化首选
  • 网站建设费用标准做网站怎么盈利
  • 仕德伟做的网站图片怎么修initial wordpress
  • 网站制作公司多少费用正规的机械外包加工订单网
  • 网站的维护和推广2345网址大全设主页访问
  • 天津商城网站建设公司如何申请注册企业邮箱
  • 做家旅游的视频网站好给我一个可以在线观看的免费
  • 香奈儿网站建设做网站应该问客户什么需求
  • 永久免费ppt下载网站互联网上市公司一览表
  • 甘肃省建设工程168网站东营智能网站设计
  • 网站跨机房建设方案山西运城市建设局网站
  • 网站被k文章修改设计师图片素材
  • 建设银行益阳市分行桃江支行网站9377烈焰传奇手游官网
  • 网站收费怎么做沈阳建设工程信息网 等级中项网
  • 做网站后台教程视频杭州网站开发建设
  • 维度 网站建设优秀vi设计网站
  • 快速搭建网站工具海洋网络做网站不负责
  • 做电影资源网站服务器怎么选wordpress唱片公司模板
  • 医院网站建设投标要求wordpress文章的表是什么