精华内容
下载资源
问答
  • Fresco

    2019-07-17 21:27:47
    1, Fresco 是是Facebook开发的一个强大的图片加载组件。 和Picasso,Glide比较,它在内存管理方面有很大优势。它的图片是存储在Native层的,可避免OOM。 github地址:https://github.com/facebook/fresco. 2, 使用...

    1, Fresco 是是Facebook开发的一个强大的图片加载组件。
    和Picasso,Glide比较,它在内存管理方面有很大优势。它的图片是存储在Native层的,可避免OOM。
    github地址:https://github.com/facebook/fresco.
    2, 使用Fresco的步骤 :
    第一步:添加依赖:
    implementation 'com.facebook.fresco:fresco:1.11.0’
    第二步:自定义一个Aplication 的子类 例如 DemoApplication//初始化Fresco
    Fresco.initialize(this);
    第三步:将DemoApplication注册到AndroidManifest.xml中。

    第四步:在layout文件声明组件,使用框架中的SimpleDraweeView。
    使用fresco的控件,需要在layout文件中添加上:
    xmlns:fresco=“http://schemas.android.com/apk/res-auto”
    注意: SimpleDraweeView的宽高不能为wrap_content,需要使用match_parent或者一个固定值。
    第五步:在Activity中拿到控件。
    第六步:产生图片的Uri。图片可以来自网络,asset目录,res目录,sd卡目录等。
    例如:Uri uri = Uri.parse(picURL);//产生网络下的资源描述符.
    产生sd卡目录下的图片资源描述符:
    new Uri.Builder()
    .scheme(UriUtil.LOCAL_FILE_SCHEME)
    .path("/sdcard/img.jpg")
    .build();

    第七步:加载图片。
    frescoImg.setImageURI(uriAsset);

    3, Freso控件的一些默认的属性:
    <com.facebook.drawee.view.SimpleDraweeView
    android:layout_width=“20dp”
    android:layout_height=“20dp”
    fresco:fadeDuration=“300”// 淡出时间,毫秒。
    fresco:actualImageScaleType=“focusCrop”// 等同于android:scaleType。
    fresco:placeholderImage="@color/wait_color"// 加载中…时显示的图。
    fresco:placeholderImageScaleType=“fitCenter”// 加载中…显示图的缩放模式。
    fresco:failureImage="@drawable/error"// 加载失败时显示的图。
    fresco:failureImageScaleType=“centerInside”// 加载失败时显示图的缩放模式。
    fresco:retryImage="@drawable/retrying"// 重试时显示图。
    fresco:retryImageScaleType=“centerCrop”// 重试时显示图的缩放模式。
    fresco:progressBarImage="@drawable/progress_bar"// 进度条显示图。
    fresco:progressBarImageScaleType=“centerInside”// 进度条时显示图的缩放模式。
    fresco:progressBarAutoRotateInterval=“1000”// 进度条旋转时间间隔。
    fresco:backgroundImage="@color/blue"// 背景图,不会被View遮挡。

    fresco:roundAsCircle=“false”// 是否是圆形图片。
    fresco:roundedCornerRadius=“1dp”// 四角圆角度数,如果是圆形图片,这个属性被忽略。
    fresco:roundTopLeft=“true”// 左上角是否圆角。
    fresco:roundTopRight=“false”// 右上角是否圆角。
    fresco:roundBottomLeft=“false”// 左下角是否圆角。
    fresco:roundBottomRight=“true”// 左下角是否圆角。
    fresco:roundingBorderWidth=“2dp”// 描边的宽度。
    fresco:roundingBorderColor="@color/border_color" 描边的颜色。
    />

    4, Freso的使用Demo。

    布局页面
    <com.facebook.drawee.view.SimpleDraweeView
    android:layout_width=“match_parent”
    android:layout_height=“match_parent”
    android:id="@+id/sdv"
    fresco:placeholderImage="@mipmap/ic_launcher"
    fresco:roundedCornerRadius=“20dp”
    fresco:roundTopLeft=“true”
    fresco:roundTopRight=“true”
    fresco:roundBottomLeft=“true”
    fresco:roundBottomRight=“true”
    fresco:roundWithOverlayColor="@color/colorAccent"
    fresco:roundingBorderWidth=“10dp”
    fresco:roundingBorderColor="@color/colorPrimary"
    />

    //加载图片
    String imgPath = “https://img-my.csdn.net/uploads/201407/26/1406383299_1976.jpg”;

    Uri uri = Uri.parse(imgPath);
    mSdv.setImageURI(uri);

    11 ButterKnife
    地址 https://www.cnblogs.com/whoislcj/p/5620128.html
    通过注解的方式 , 减少了代码中 findViewById以及setOnClickListener等代码量。
    优势:
    1,ButterKnife优势相比起xutils来,ButterKnife更受欢迎,在性能方面xutils完全是利用的反射,butterknife是轻量级的反射使用的注解都是编译时注解.
    2,强大的View绑定和Click事件处理功能,简化代码,提升开发效率
    3,方便的处理Adapter里的ViewHolder绑定问题
    4,运行时不会影响APP效率,使用配置方便
    代码清晰,可读性强

    使用步骤:

    第一步: 导入依赖

    implementation ‘com.jakewharton:butterknife:8.8.1’
    annotationProcessor ‘com.jakewharton:butterknife-compiler:8.8.1’

    第二步: Activity的 onCreate方法中
    unbinder = ButterKnife.bind(this);

    onDestroy方法中
    unbinder.unbind();

    Fragment 在 onCreateView 中
    unbinder = ButterKnife.bind(this,rootView);
    onDestroy方法中
    unbinder.unbind();
    注意:Activity和Fragment的区别.
    ButterKnife.bind()的调用在Activity中必须在setContentView之后
    属性布局不能用private or static 修饰,否则会报错

    第三步:使用
    注解
    – View的注解—
    @BindView(布局页面中控件的ID)
    TextView tv;

    @BindViews({控件的id1,控件的id2})
    List data;
    —Resource注入 —
    @BindBitmap(图片的id)//Bitmap注解使用
    Bitmap bitmap;

    @BindDrawable(图片的id)//Drawable注解使用
    Drawable drawable;
    //监听的使用

    @OnClick(R.id.but_id)
    public void onClick(View view)
    {
    Toast.makeText(this, “你点击了按钮”, Toast.LENGTH_SHORT).show();
    }

    @BindString(R.string.msg)//string注解使用
    String message;

    @BindArray(R.array.names)
    String weeks[];//数组

    @BindColor(R.color.colorPrimary)
    int colorPrimary;//color注解使用

    ----事件的注解----
    @OnClick(R.id.but_id)
    public void click(){ }

     可以写一个BaseActivity来调用ButterKnife.bind()方法,子类则不需要再进行bind操作
     在8.4中ButterKnife移除了unBind方法,使用ButterKnife.bind(this)返回一个Unbinder的引用,通过Unbinder的unbind()方法进行解除绑定.

    Demo使用的网络资源。
    https://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1

    在这里插入图片描述

    package com.example.myapplication
    
    import android.support.v7.app.AppCompatActivity
    import android.os.Bundle
    import android.util.Log
    import com.example.myapplication.Bean.Bean
    import com.example.myapplication.retorfitInterface.IgetbyData
    import retrofit2.Call
    import retrofit2.Callback
    import retrofit2.Response
    import retrofit2.Retrofit
    import retrofit2.converter.gson.GsonConverterFactory
    import retrofit2.http.Url
    import java.net.URL
    
    class GetActivity : AppCompatActivity() {
    
        private var baseUrl = "http://www.qubaobei.com";
        private var url = "http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=20&page=1";
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_get)
            println("###进入此页面")
            Log.i("###","进入此页面")
            initRetorfit();
    
            initUrl();
        }
    
        private fun initUrl() {
    //        Retrofit.Builder().addConverterFactory(GsonConverterFactory.create()).baseUrl(url)
    //                .build().create(IgetbyData::class.java).getData()
        }
    
        private fun initRetorfit() {
    //    获取构建者
            val builder = Retrofit.Builder()
    //        传入baseUrl
            builder.baseUrl(baseUrl)
            builder.addConverterFactory(GsonConverterFactory.create())
            
    //        获取retorfit实例
            val retrofit = builder.build()
            var igetbyData:IgetbyData = retrofit.create(IgetbyData::class.java)
    
            val call = igetbyData.getData("dish_list.php", "1", "20", "1")
            call.enqueue(object :Callback<Bean>{
                override fun onFailure(call: Call<Bean>?, t: Throwable?) {
    //              请求失败
                    println("###请求数据失败")
                }
    
                override fun onResponse(call: Call<Bean>?, response: Response<Bean>?) {
                        println("###请求后的数据"+response?.body().toString())
                }
            })
    
        }
    }
    
    
    package com.example.myapplication
    
    import android.support.v7.app.AppCompatActivity
    import android.os.Bundle
    import android.widget.ListView
    import butterknife.BindView
    import butterknife.ButterKnife
    import com.example.myapplication.Bean.Bean
    import com.example.myapplication.retorfitInterface.IgetbyData
    import kotlinx.android.synthetic.main.activity_butter_knife.*
    import retrofit2.Call
    import retrofit2.Callback
    import retrofit2.Response
    import retrofit2.Retrofit
    import retrofit2.converter.gson.GsonConverterFactory
    
    class ButterKnife : AppCompatActivity() {
        @BindView(R.id.mylist)
        var listView:ListView? = null;
        var adapter = MyAdapter(this);
        private var baseUrl = "http://www.qubaobei.com";
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_butter_knife)
    
            val bind = ButterKnife.bind(this)
            initView();
            initRetorfit()
    
    
        }
    
        private fun initView() {
            mylist.adapter = adapter;
        }
    
    
        private fun initRetorfit() {
            val builder = Retrofit.Builder()
            builder.baseUrl(baseUrl)
            builder.addConverterFactory(GsonConverterFactory.create())
            val retrofit = builder.build()
            var igetbyData: IgetbyData = retrofit.create(IgetbyData::class.java)
    
            val call = igetbyData.getData("dish_list.php", "1", "20", "1")
            call.enqueue(object : Callback<Bean> {
                override fun onFailure(call: Call<Bean>?, t: Throwable?) {
                    println("###请求数据失败")
                }
                override fun onResponse(call: Call<Bean>?, response: Response<Bean>?) {
                    println("###请求后的数据"+response?.body())
                    val bean = response?.body() as Bean
                    adapter.list = bean.data;
                }
            })
    
        }
    }
    
    

    INTERESTING!!!

    展开全文
  • fresco

    2019-03-17 22:33:29
    implementation 'com.facebook.fresco:fresco:1.9.0' // 支持 GIF 动图,需要添加 implementation 'com.facebook.fresco:animated-gif:1.9.0' 创建外部类继承Application 重写onCreate()方法 public class MyApp ...

    依赖

    implementation 'com.facebook.fresco:fresco:1.9.0'
    // 支持 GIF 动图,需要添加
    implementation 'com.facebook.fresco:animated-gif:1.9.0'
    

    创建外部类继承Application 重写onCreate()方法

    public class MyApp extends Application { 
        @Override     
        public void onCreate() {  
           super.onCreate(); 
            //设置磁盘缓存    
            DiskCacheConfig diskCacheConfig =  DiskCacheConfig.newBuilder(this)  
                .setBaseDirectoryName("images")          
                .setBaseDirectoryPath(Environment.getExternalStorageDirectory())     
                .build();         
            //设置磁盘缓存的配置,生成配置文件    
            ImagePipelineConfig config = ImagePipelineConfig.newBuilder(this)      
                 .setMainDiskCacheConfig(diskCacheConfig)          
                 .build();        
             Fresco.initialize(this, config); //不设置默认传一个参数既可    
         } 
    }
    

    布局

    <com.facebook.drawee.view.SimpleDraweeView
            android:id="@+id/my_imag"
            android:layout_width="100dp"
            android:layout_height="100dp"
            app:progressBarImage="@drawable/jz"/>
    
    XML属性                          意义
    fadeDuration 淡入淡出动画持续时间(单位:毫秒ms)
    actualImageScaleType 实际图像的缩放类型
    placeholderImage 占位图
    placeholderImageScaleType 占位图的缩放类型
    progressBarImage 进度图
    progressBarImageScaleType 进度图的缩放类型
    progressBarAutoRotateInterval 进度图自动旋转间隔时间(单位:毫秒ms)
    failureImage 失败图
    failureImageScaleType 失败图的缩放类型
    retryImage 重试图
    retryImageScaleType 重试图的缩放类型
    backgroundImage 背景图
    overlayImage 叠加图
    pressedStateOverlayImage 按压状态下所显示的叠加图
    roundAsCircle 设置为圆形图
    roundedCornerRadius 圆角半径
    roundTopLeft 左上角是否为圆角
    roundTopRight 右上角是否为圆角
    roundBottomLeft 左下角是否为圆角
    roundBottomRight 右下角是否为圆角
    roundingBorderWidth 圆形或者圆角图边框的宽度
    roundingBorderColor 圆形或者圆角图边框的颜色
    roundWithOverlayColor 圆形或者圆角图底下的叠加颜色(只能设置颜色)
    viewAspectRatio 控件纵横比
    
    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,748
精华内容 1,899
关键字:

fresco