AndroidStudio 实现根据url动态加载图片和动态更改文字(Imageview&TextView)
1. 根据url动态更改图片
(1)MyImageView.java
package com.example.ict2021menu.utils;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
import android.widget.Toast;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class MyImageView extends androidx.appcompat.widget.AppCompatImageView {
public static final int GET_DATA_SUCCESS = 1;
public static final int NETWORK_ERROR = 2;
public static final int SERVER_ERROR = 3;
//子线程不能操作UI,通过Handler设置图片
@SuppressLint("HandlerLeak")
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_SHORT).show();
break;
case SERVER_ERROR:
Toast.makeText(getContext(),"服务器发生错误",Toast.LENGTH_SHORT).show();
break;
}
}
};
public MyImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public MyImageView(Context context) {
super(context);
}
public MyImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
//设置网络图片
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
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
//利用Message把图片发给Handler
Message msg = Message.obtain();
msg.obj = bitmap;
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();
}
}
(2)布局文件xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background_main"
tools:context=".recommend_Activity">
<com.example.ict2021menu.utils.MyImageView
android:id="@+id/recommend_image"
android:layout_width="320dp"
android:layout_height="240dp"
android:layout_marginStart="32dp"
android:layout_marginLeft="32dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.496"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.221" />
<TextView
android:id="@+id/recommend_result"
android:layout_width="match_parent"
android:layout_height="160dp"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:background="@drawable/recommend_text"
android:text=" "
android:textColor="@color/black"
android:textSize="25sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.496"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.796" />
<Button
android:id="@+id/recommend_button"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:layout_marginStart="88dp"
android:layout_marginLeft="88dp"
android:background="@drawable/button_frame"
android:text="点击刷新"
android:textSize="25sp"
app:backgroundTint="@null"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.496"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.952" />
</androidx.constraintlayout.widget.ConstraintLayout>
##(3)调用java文件
========>>本文件由于添加了其他组件,进行了删除,运行时需要自己改一下,上面文件改一下包名即可(根据AndroidStudio提示改就行)
package com.example.ict2021menu;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.example.ict2021menu.utils.MyImageView;
import com.example.ict2021menu.utils.bafaCloudUtil;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
/*
今日推荐界面显示:=======>功能未定
*/
public class recommend_Activity extends AppCompatActivity {
private TextView result_view;
//private ImageView result_image;//1600*1200
private Button button_recommend;
private String url_pic;
private TextView food_ide;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recommend);
//1-找到控件
result_view=(TextView) findViewById(R.id.recommend_result);
food_ide=(TextView)findViewById((R.id.Food_identification)) ;
button_recommend =findViewById(R.id.recommend_button);
// result_image= ( ImageView )findViewById(R.id.recommend_image);
final MyImageView myImageView = (MyImageView) findViewById(R.id.recommend_image);
//2-实现功能
/*
===》图片更新:控件名.setImageURL(url); url字符串
===》信息更新:控件名.setText(information); information
*/
//点击按钮实现图片和菜品信息更新
button_recommend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myImageView.setImageURL("https://pic.cnblogs.com/avatar/1142647/20170416093225.png");
result_view.setText(return_cook());
}
});
}
private String return_cook(){
//TODO:返回信息选择
//默认返回信息
return " 你好";
}
}
2.动态更改文字
控件名.setText(" 字符串类型 ");