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/