本组件采用继承系统原有Button实现
效果图:
拖动释放
自定义Button
package ui; import android.content.Context; import android.util.AttributeSet; import android.util.DisplayMetrics; import android.util.Log; import android.view.MotionEvent; import android.view.WindowManager; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.AnimationSet; import android.view.animation.ScaleAnimation; import android.widget.Button; /** * * @author chenxiruanhai * * */ public class MenuButton extends Button { private Context mContext; private WindowManager mWm; int lastX; int lastY; int screenWidth; int screenHeight; public MenuButton(Context context, AttributeSet attrs) { super(context, attrs); this.mContext = context; mWm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); DisplayMetrics dm = mContext.getResources().getDisplayMetrics(); screenWidth = dm.widthPixels; screenHeight = dm.heightPixels; } @Override public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); measure(0, 0); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); break; case MotionEvent.ACTION_MOVE: int dx = (int) event.getRawX() - lastX; int dy = (int) event.getRawY() - lastY; int left = this.getLeft() + dx; int top = this.getTop() + dy; int right = this.getRight() + dx; int bottom = this.getBottom() + dy; if (left < 0) { left = 0; right = left + this.getWidth(); } if (right > screenWidth) { right = screenWidth; left = right - this.getWidth(); } if (top < 0) { top = 0; bottom = top + this.getHeight(); } if (bottom > screenHeight) { bottom = screenHeight; top = bottom - this.getHeight(); } this.layout(left, top, right, bottom); lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); break; case MotionEvent.ACTION_UP:{ Animation alphaAnimation = new AlphaAnimation( 0.5f,1f); alphaAnimation.setDuration(1000); // Animation scaleAnimation = new ScaleAnimation(1.0f, 2.0f,1.0f,2.0f); scaleAnimation.setDuration(300); // Animation scaleAnimation2 = new ScaleAnimation(0.1f, 1.0f,0.1f,1.0f); // scaleAnimation2.setDuration(500); // // TranslateAnimation translate = new // TranslateAnimation(0.1f,70.0f,0.1f,0.1f); // // translate.setDuration(800); // Animation scaleAnimation2 = new ScaleAnimation(1.0f, .5f,1.0f,.5f); scaleAnimation2.setDuration(500); AnimationSet animationSet = new AnimationSet(true); animationSet.addAnimation(alphaAnimation); animationSet.addAnimation(scaleAnimation); animationSet.addAnimation(scaleAnimation2); animationSet.setFillAfter(true); Animation currentAnima = getAnimation(); if(null!=currentAnima) { currentAnima.cancel(); animationSet.reset(); } startAnimation(animationSet); } break; } return true; } }
使用
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/shape_panel_background" android:orientation="vertical" > <FrameLayout android:layout_width="fill_parent" android:layout_height="fill_parent" > <openui.XListView android:id="@+id/listView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:divider="@drawable/line_seperator" android:dividerHeight="3dip" android:paddingLeft="10dip" android:paddingRight="10dip" android:scrollbarStyle="outsideOverlay" > </openui.XListView> <openui.MenuButton android:id="@+id/menu" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:background="@drawable/selector_home_menu" android:text="菜单" /> </FrameLayout> </LinearLayout>
Activity:
public class MainActivity extends Activity { public static final String Tag = "MainActivity"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void show(View v){ Toast.makeText(this, "普通按钮点击", Toast.LENGTH_LONG).show(); } public void myBtnClick(View v){ Toast.makeText(this, "myBtn Click", Toast.LENGTH_LONG).show(); } }