关于纯代码构建自定义组件的有关问题
关于纯代码构建自定义组件的问题
我想写一个图片按钮,继承ImageButton,传入down和up状态的图片ID,在OnTouch的时候更换图片。类是写出来了,但是如果new两个以上的按钮的时候,无论点击哪个按钮,都只会是最后一个按钮响应,请大侠指点
调用的方式是
------解决方案--------------------
知道问题了,addContentView,这个东西只能调用一次,这个是activity用来初始化自己的UI的,或设置view root.你如果多次调用,每次都会先把前面的remove掉,然后添加新的。
你的这个问题,需要把所有的button放在一个viewgroup中,然后在把这个viewgroup,添加到activity中,就是用addContentView
我想写一个图片按钮,继承ImageButton,传入down和up状态的图片ID,在OnTouch的时候更换图片。类是写出来了,但是如果new两个以上的按钮的时候,无论点击哪个按钮,都只会是最后一个按钮响应,请大侠指点
- Java code
package com.hahalotto.common.views; import android.content.Context; import android.view.MotionEvent; import android.view.View; import android.widget.ImageButton; public class GameImageButtonView extends ImageButton{ private int buttonUpId; private int buttonDownId; public GameImageButtonView(Context context) { // TODO Auto-generated constructor stub super(context); } public void setButtonStateIds(int upId, int downId) { System.out.println(getId()); buttonUpId = upId; buttonDownId = downId; setImageResource(upId); setBackgroundColor(0x00000000); setOnTouchListener(new ImgBtnTouchListener()); } class ImgBtnTouchListener implements OnTouchListener { public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub System.out.println(getId()); if (event.getAction() == MotionEvent.ACTION_DOWN) { System.out.println("down"); setImageResource(buttonDownId); } else { System.out.println("up"); setImageResource(buttonUpId); } return false; } } }
调用的方式是
- Java code
private void initBtns() { type5Btn = new GameImageButtonView(this); type10Btn = new GameImageButtonView(this); type20Btn = new GameImageButtonView(this); type5Btn.setId(1000); type10Btn.setId(2000); type20Btn.setId(3000); addContentView(type5Btn,new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); addContentView(type10Btn,new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); addContentView(type20Btn,new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); type5Btn.setPadding(60, 110, 0, 0); type10Btn.setPadding(300, 110, 0, 0); type20Btn.setPadding(540, 110, 0, 0); type5Btn.setButtonStateIds(R.drawable.hf_type_5_1, R.drawable.hf_type_5_2); type10Btn.setButtonStateIds(R.drawable.hf_type_10_1, R.drawable.hf_type_10_2); type20Btn.setButtonStateIds(R.drawable.hf_type_20_1, R.drawable.hf_type_20_2); type5Btn.setOnClickListener(new ImgBtnClickListener()); type10Btn.setOnClickListener(new ImgBtnClickListener()); type20Btn.setOnClickListener(new ImgBtnClickListener()); }
------解决方案--------------------
知道问题了,addContentView,这个东西只能调用一次,这个是activity用来初始化自己的UI的,或设置view root.你如果多次调用,每次都会先把前面的remove掉,然后添加新的。
你的这个问题,需要把所有的button放在一个viewgroup中,然后在把这个viewgroup,添加到activity中,就是用addContentView