Button控件是安卓应用程序开发经常使用的控件,下面来介绍一下比较重要的几个事件的使用。
整体思路:首先继承OnClickListener,OnTouchListener,OnFocusChangeListener,OnKeyListener这四个Button控件重要的事件,然后在OnClick事件中写适屏的代码(如果超过了屏幕宽度就减小一些宽度和高度;如果图片宽度太小就增加一些宽度和高度),以此来观察点击时按钮或图片的不断变大直到不变的功能;在onKey事件中根据按上和按下操作设置不同的图片;在onFocusChange事件中根据焦点的变化设置不同的图片;在onTouch事件中根据触摸和没触摸设置不同的图片。这样就可以比较清楚的看到这几个事件的作用和使用方法。
activity_main.xml文件:
<Button android:id="@+id/commonbutton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="我的按钮一" /> <Button android:id="@+id/imagebutton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/button1" android:gravity="center" />MainActivity.java文件:
public class MainActivity extends Activity implements OnClickListener,OnTouchListener,OnFocusChangeListener,OnKeyListener{ private int value=1; private Button commonButton; private Button imageButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); commonButton=(Button)findViewById(R.id.commonbutton); imageButton=(Button)findViewById(R.id.imagebutton); commonButton.setOnClickListener(this); imageButton.setOnClickListener(this); imageButton.setOnTouchListener(this); imageButton.setOnFocusChangeListener(this); imageButton.setOnKeyListener(this); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public void onClick(View v) { // TODO Auto-generated method stub Button button=(Button)v; if(value==1&&button.getWidth()==getWindowManager().getDefaultDisplay().getWidth()){ value=-1; }else if(value==-1&&button.getWidth()<100){ value=1; } button.setWidth(button.getWidth()+(int)(button.getWidth()*0.1)*value); button.setHeight(button.getHeight()+(int)(button.getHeight()*0.1)*value); } @Override public boolean onKey(View v, int keyCode, KeyEvent event) { // TODO Auto-generated method stub if(KeyEvent.ACTION_DOWN==event.getAction()){ v.setBackgroundResource(R.drawable.try1); }else if(KeyEvent.ACTION_UP==event.getAction()){ v.setBackgroundResource(R.drawable.try2); } return false; } //当前这个控件的焦点发生变化的时候会触发 @Override public void onFocusChange(View arg0, boolean arg1) { // TODO Auto-generated method stub if(arg1){ imageButton.setBackgroundResource(R.drawable.test1); }else{ imageButton.setBackgroundResource(R.drawable.test2); } } //触摸时发生变化 @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub if(event.getAction()==MotionEvent.ACTION_UP){ v.setBackgroundResource(R.drawable.button1); }else if(event.getAction()==MotionEvent.ACTION_DOWN){ v.setBackgroundResource(R.drawable.button2); } return false; } }