欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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);
	}
}
相关标签: Android学习