Android学习之自定义控件
程序员文章站
2022-03-23 23:15:14
...
自定义控件
1.创建一个java类,并继承相关控件类。而且要实现三个 构造函数如下:
public class MyImageView extends ImageView{
public MyImageView(Context context) {
super(context);
}
public MyImageView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public MyImageView(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
2.一般都会在该类中 创建一个Handler对象成员变量来操作这个控件。由于这个对象是要在主线程中创建的,所以 Handler对象成员变量也是在主线程中创建,它会和主线程相绑定。可以修改控件。
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
Bitmap bitmap = (Bitmap) msg.obj;
setImageBitmap(bitmap);
}
};
3.封装功能代码,如封装一个可以访问网络获取图片的方法。在使用时只需要调用这个方法传入URL即可
//自定义方法 并封装 代码控制该控件。
public void setHTTPURL(final String url) {
new Thread() { //创建子线程 访问网络
@Override
public void run() {
try {
URL u = new URL(url);
HttpURLConnection conn = (HttpURLConnection) u.openConnection();
InputStream is = conn.getInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(is);
Message msg = Message.obtain(); //获取消息 对象
msg.obj = bitmap ;
handler.sendMessage(msg); //通过handler 对象 将消息发送到 主线程的 消息队列中。 目的是修改UI
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();;
}
4.在activity.xml布局文件中使用这个控件时,标签名必须是类的全路径。
<com.example.mydefinitioncomponent.MyImageView
android:id="@+id/img_myimg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/btn_search"
/>
5.在主线程中获取该控件 并调用相关方法操作该控件。
public class MainActivity extends Activity implements OnClickListener{
private EditText edittNetAddress;
private Button btnSearch;
private MyImageView myImg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edittNetAddress = this.findViewById(R.id.edit_address);
btnSearch = this.findViewById(R.id.btn_search);
myImg = this.findViewById(R.id.img_myimg);
btnSearch.setOnClickListener(this);
}
@Override
public void onClick(View arg0) {
String url = edittNetAddress.getText().toString().trim();
myImg.setHTTPURL(url);
}
}
上一篇: php怎么删除html注释
下一篇: php中的三角形之谜