• 点击图片自动变色


    package com.example.imagelTint;
    
    import android.annotation.SuppressLint;
    import android.content.Context;
    import android.content.res.ColorStateList;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.ColorFilter;
    import android.graphics.drawable.Drawable;
    import android.graphics.drawable.StateListDrawable;
    import android.os.Handler;
    import android.os.Message;
    import android.util.AttributeSet;
    import android.widget.ImageButton;
    import android.widget.ImageView;
    import android.widget.Toast;
    
    
    import androidx.annotation.NonNull;
    import androidx.annotation.Nullable;
    import androidx.core.graphics.drawable.DrawableCompat;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    
    @SuppressLint("AppCompatCustomView")
    public class MyImageView extends ImageButton {
        public static final int GET_DATA_SUCCESS = 1;
        public static final int NETWORK_ERROR = 2;
        public static final int SERVER_ERROR = 3;
        private Bitmap mBitmap;
        //子线程不能操作UI,通过Handler设置图片
        private Handler handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                switch (msg.what){
                    case GET_DATA_SUCCESS:
                        Bitmap bitmap = (Bitmap) msg.obj;
                        setImageBitmap(bitmap);
                        break;
                    case NETWORK_ERROR:
                        Toast.makeText(getContext(),"网络连接失败",Toast.LENGTH_LONG);
                        break;
                    case SERVER_ERROR:
                        Toast.makeText(getContext(),"服务器发生错误",Toast.LENGTH_LONG);
                        break;
                }
            }
        };
    
        public MyImageView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            initView();
        }
    
        public MyImageView(Context context) {
            super(context);
            initView();
        }
    
        public MyImageView(Context context, AttributeSet attrs) {
            super(context, attrs);
            initView();
        }
        private void initView(){
            Drawable src = MyImageView.this.getDrawable();
            MyImageView.this.setImageDrawable(tintDrawable(src));
            MyImageView.this.setClickable(true);
    //         设置可以点击
        }
        private Drawable tintDrawable(Drawable normal) {
            final Drawable press = DrawableCompat.wrap(normal);
            final StateListDrawable draw = new StateListDrawable();
            draw.addState(new int[]{-android.R.attr.state_pressed},getResources().getDrawable(R.drawable.batman));
            DrawableCompat.setTint(press, 0x4bFF00FF);
            draw.addState(new int[]{android.R.attr.state_pressed},normal);
            return draw;
        }
    
        //设置网络图片
        public void setImageURL(final String path) {
            //开启一个线程用于联网
            new Thread() {
                @Override
                public void run() {
                    try {
                        //把传过来的路径转成URL
                        URL url = new URL(path);
                        //获取连接
                        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                        //使用GET方法访问网络
                        connection.setRequestMethod("GET");
                        //超时时间为10秒
                        connection.setConnectTimeout(10000);
                        //获取返回码
                        int code = connection.getResponseCode();
                        if (code == 200) {
                            InputStream inputStream = connection.getInputStream();
                            //使用工厂把网络的输入流生产Bitmap
                            mBitmap = BitmapFactory.decodeStream(inputStream);
                            //利用Message把图片发给Handler
                            Message msg = Message.obtain();
                            msg.obj = mBitmap;
                            msg.what = GET_DATA_SUCCESS;
                            handler.sendMessage(msg);
                            inputStream.close();
                        }else {
                            //服务启发生错误
                            handler.sendEmptyMessage(SERVER_ERROR);
                        }
                    } catch (IOException e) {
                        e.printStackTrace();
                        //网络连接错误
                        handler.sendEmptyMessage(NETWORK_ERROR);
                    }
                }
            }.start();
        }
        /**
         * 获取网络图片Bitmap
         */
        public Bitmap getBitmap() {
            return mBitmap;
        }
    }
    

      修改色调,饱和度,亮度,参考:https://blog.csdn.net/u010542146/article/details/50538335/

  • 相关阅读:
    PHP面试总结
    yii2-dingtalk 钉钉群机器人
    分布式锁机制原理及实现方式
    strtotime的一个使用问题
    JavaScript的程序构成
    libsvm源码凝视+算法描写叙述:svm_train
    android事件分发(二)
    Windows 上通过本地搭建 Jekyll环境
    重点:用户画像
    easyui英文提示变中文
  • 原文地址:https://www.cnblogs.com/Dmail/p/14092802.html
Copyright © 2020-2023  润新知