:
Example 1: effect 1
Example 1: Effect 2
Example 1: source code:
Http://download.csdn.net/detail/niejing654092427/4698359
Example 2 ::
Mainactivity:
Package com.cn. NJ. quickaction; import android. app. activity; import android. OS. bundle; import android. view. view; import android. view. view. onclicklistener; import android. widget. button; import com.cn. NJ. quickaction. util. quick. actionitem; import com.cn. NJ. quickaction. util. quick. quickaction; public class quickactiontestactivity extends activity implements onclicklistener {private button button01;/** called when the activity is first created. * // @ override public void oncreate (bundle savedinstancestate) {super. oncreate (savedinstancestate); setcontentview (R. layout. main); button01 = (button) findviewbyid (R. id. button1); button01.setonclicklistener (this) ;}@ overridepublic void onclick (view v) {Switch (v. GETID () {case R. id. button1: Show (V); break; default: break;} private void show (view v) {final actionitem first = new actionitem (); view sexview = v. findviewbyid (R. id. button1); Final quickaction QA = new quickaction (sexview); first. settitle ("camera"); first. seticon (getresources (). getdrawable (R. drawable. camera_icon_select); first. setonclicklistener (New onclicklistener () {@ overridepublic void onclick (view v) {getdismiss (QA) ;}}); Final actionitem second = new actionitem (); Second. settitle ("file"); Second. seticon (getresources (). getdrawable (R. drawable. album_icon_select); Second. setonclicklistener (New onclicklistener () {@ overridepublic void onclick (view v) {getdismiss (QA) ;}}); QA. addactionitem (first); QA. addactionitem (second); QA. show ();} private void getdismiss (quickaction QA) {QA. dismiss ();}}
Actionitem:
package com.cn.nj.quickaction.util.quick;import android.graphics.drawable.Drawable;import android.view.View.OnClickListener;/** */public class ActionItem {private Drawable icon;private String title;private OnClickListener listener;/** * Constructor */public ActionItem() {}/** * Constructor * * @param icon {@link Drawable} action icon */public ActionItem(Drawable icon) {this.icon = icon;}/** * Set action title * * @param title action title */public void setTitle(String title) {this.title = title;}/** * Get action title * * @return action title */public String getTitle() {return this.title;}/** * Set action icon * * @param icon {@link Drawable} action icon */public void setIcon(Drawable icon) {this.icon = icon;}/** * Get action icon * @return {@link Drawable} action icon */public Drawable getIcon() {return this.icon;}/** * Set on click listener * * @param listener on click listener {@link View.OnClickListener} */public void setOnClickListener(OnClickListener listener) {this.listener = listener;}/** * Get on click listener * * @return on click listener {@link View.OnClickListener} */public OnClickListener getListener() {return this.listener;}}
Quickaction:
package com.cn.nj.quickaction.util.quick;import java.util.ArrayList;import android.content.Context;import android.graphics.Rect;import android.graphics.drawable.Drawable;import android.view.Gravity;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.view.ViewGroup;import android.view.ViewGroup.LayoutParams;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.ScrollView;import android.widget.TextView;import com.cn.nj.quickaction.R;/** */public class QuickAction extends CustomPopupWindow {private final View root;private final ImageView mArrowUp;private final ImageView mArrowDown;private final LayoutInflater inflater;private final Context context;protected static final int ANIM_GROW_FROM_LEFT = 1;protected static final int ANIM_GROW_FROM_RIGHT = 2;protected static final int ANIM_GROW_FROM_CENTER = 3;protected static final int ANIM_REFLECT = 4;protected static final int ANIM_AUTO = 5;private int animStyle;private ViewGroup mTrack;private ScrollView scroller;private ArrayList<ActionItem> actionList;/** * Constructor * * @param anchor {@link View} on where the popup window should be displayed */public QuickAction(View anchor) {super(anchor);actionList= new ArrayList<ActionItem>();context= anchor.getContext();inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);root= (ViewGroup) inflater.inflate(R.layout.quick_popup, null);mArrowDown = (ImageView) root.findViewById(R.id.arrow_down);mArrowUp = (ImageView) root.findViewById(R.id.arrow_up);setContentView(root); mTrack = (ViewGroup) root.findViewById(R.id.tracks);scroller= (ScrollView) root.findViewById(R.id.scroller);animStyle= ANIM_AUTO;}/** * Set animation style * * @param animStyle animation style, default is set to ANIM_AUTO */public void setAnimStyle(int animStyle) {this.animStyle = animStyle;}/** * Add action item * * @param action {@link ActionItem} object */public void addActionItem(ActionItem action) {actionList.add(action); }/** * Show popup window. Popup is automatically positioned, on top or bottom of anchor view. * */public void show () {preShow();int xPos, yPos;int[] location = new int[2];anchor.getLocationOnScreen(location);Rect anchorRect = new Rect(location[0], location[1], location[0] + anchor.getWidth(), location[1] + anchor.getHeight());createActionList();root.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));root.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);int rootHeight = root.getMeasuredHeight();int rootWidth= root.getMeasuredWidth();int screenWidth = windowManager.getDefaultDisplay().getWidth();int screenHeight= windowManager.getDefaultDisplay().getHeight();//automatically get X coord of popup (top left)if ((anchorRect.left + rootWidth) > screenWidth) {xPos = anchorRect.left - (rootWidth-anchor.getWidth());} else {if (anchor.getWidth() > rootWidth) {xPos = anchorRect.centerX() - (rootWidth/2);} else {xPos = anchorRect.left;}}int dyTop= anchorRect.top;int dyBottom= screenHeight - anchorRect.bottom;boolean onTop= (dyTop > dyBottom) ? true : false;if (onTop) {if (rootHeight > dyTop) {yPos = 15;LayoutParams l = scroller.getLayoutParams();l.height= dyTop - anchor.getHeight();} else {yPos = anchorRect.top - rootHeight;}} else {yPos = anchorRect.bottom;if (rootHeight > dyBottom) { LayoutParams l = scroller.getLayoutParams();l.height= dyBottom;}}showArrow(((onTop) ? R.id.arrow_down : R.id.arrow_up), anchorRect.centerX()-xPos);setAnimationStyle(screenWidth, anchorRect.centerX(), onTop);window.showAtLocation(anchor, Gravity.NO_GRAVITY, xPos, yPos);}/** * Set animation style * * @param screenWidth screen width * @param requestedX distance from left edge * @param onTop flag to indicate where the popup should be displayed. Set TRUE if displayed on top of anchor view * and vice versa */private void setAnimationStyle(int screenWidth, int requestedX, boolean onTop) {int arrowPos = requestedX - mArrowUp.getMeasuredWidth()/2;switch (animStyle) {case ANIM_GROW_FROM_LEFT:window.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Left : R.style.Animations_PopDownMenu_Left);break;case ANIM_GROW_FROM_RIGHT:window.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Right : R.style.Animations_PopDownMenu_Right);break;case ANIM_GROW_FROM_CENTER:window.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Center : R.style.Animations_PopDownMenu_Center);break;case ANIM_REFLECT:window.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Reflect : R.style.Animations_PopDownMenu_Reflect);break;case ANIM_AUTO:if (arrowPos <= screenWidth/4) {window.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Left : R.style.Animations_PopDownMenu_Left);} else if (arrowPos > screenWidth/4 && arrowPos < 3 * (screenWidth/4)) {window.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Center : R.style.Animations_PopDownMenu_Center);} else {window.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Right : R.style.Animations_PopDownMenu_Right);}break;}}/** * Create action list */private void createActionList() {View view;String title;Drawable icon;OnClickListener listener;for (int i = 0; i < actionList.size(); i++) {title = actionList.get(i).getTitle();icon = actionList.get(i).getIcon();listener= actionList.get(i).getListener();view = getActionItem(title, icon, listener);view.setFocusable(true);view.setClickable(true); mTrack.addView(view);}}/** * Get action item {@link View} * * @param title action item title * @param icon {@link Drawable} action item icon * @param listener {@link View.OnClickListener} action item listener * @return action item {@link View} */private View getActionItem(String title, Drawable icon, OnClickListener listener) {LinearLayout container= (LinearLayout) inflater.inflate(R.layout.action_item, null);ImageView img= (ImageView) container.findViewById(R.id.icon);TextView text= (TextView) container.findViewById(R.id.title);if (icon != null) {img.setImageDrawable(icon);}if (title != null) {text.setText(title);}if (listener != null) {container.setOnClickListener(listener);}return container;}/** * Show arrow * * @param whichArrow arrow type resource id * @param requestedX distance from left screen */private void showArrow(int whichArrow, int requestedX) { final View showArrow = (whichArrow == R.id.arrow_up) ? mArrowUp : mArrowDown; final View hideArrow = (whichArrow == R.id.arrow_up) ? mArrowDown : mArrowUp; final int arrowWidth = mArrowUp.getMeasuredWidth(); showArrow.setVisibility(View.VISIBLE); ViewGroup.MarginLayoutParams param = (ViewGroup.MarginLayoutParams)showArrow.getLayoutParams(); param.leftMargin = requestedX - arrowWidth / 2; hideArrow.setVisibility(View.INVISIBLE); }}
Custompopupwindow:
package com.cn.nj.quickaction.util.quick;import android.content.Context;import android.graphics.Rect;import android.graphics.drawable.BitmapDrawable;import android.graphics.drawable.Drawable;import android.view.Gravity;import android.view.LayoutInflater;import android.view.MotionEvent;import android.view.View;import android.view.View.OnTouchListener;import android.view.ViewGroup.LayoutParams;import android.view.WindowManager;import android.widget.PopupWindow;import com.cn.nj.quickaction.R;public class CustomPopupWindow {protected final View anchor;protected final PopupWindow window;private View root;private Drawable background = null;protected final WindowManager windowManager;/** * Create a QuickAction * * @param anchor * the view that the QuickAction will be displaying 'from' */public CustomPopupWindow(View anchor) {this.anchor = anchor;this.window = new PopupWindow(anchor.getContext());// when a touch even happens outside of the window// make the window go awaywindow.setTouchInterceptor(new OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {CustomPopupWindow.this.window.dismiss();return true;}return false;}});windowManager = (WindowManager) anchor.getContext().getSystemService(Context.WINDOW_SERVICE);onCreate();}/** * Anything you want to have happen when created. Probably should create a view and setup the event listeners on * child views. */protected void onCreate() {}/** * In case there is stuff to do right before displaying. */protected void onShow() {}protected void preShow() {if (root == null) {throw new IllegalStateException("setContentView was not called with a view to display.");}onShow();if (background == null) {window.setBackgroundDrawable(new BitmapDrawable());} else {window.setBackgroundDrawable(background);}// if using PopupWindow#setBackgroundDrawable this is the only values of the width and hight that make it work// otherwise you need to set the background of the root viewgroup// and set the popupwindow background to an empty BitmapDrawablewindow.setWidth(WindowManager.LayoutParams.WRAP_CONTENT);window.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);window.setTouchable(true);window.setFocusable(true);window.setOutsideTouchable(true);window.setContentView(root);}public void setBackgroundDrawable(Drawable background) {this.background = background;}/** * Sets the content view. Probably should be called from {@link onCreate} * * @param root * the view the popup will display */public void setContentView(View root) {this.root = root;window.setContentView(root);}/** * Will inflate and set the view from a resource id * * @param layoutResID */public void setContentView(int layoutResID) {LayoutInflater inflator =(LayoutInflater) anchor.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);setContentView(inflator.inflate(layoutResID, null));}/** * If you want to do anything when {@link dismiss} is called * * @param listener */public void setOnDismissListener(PopupWindow.OnDismissListener listener) {window.setOnDismissListener(listener);}/** * Displays like a popdown menu from the anchor view */public void showDropDown() {showDropDown(0, 0);}/** * Displays like a popdown menu from the anchor view. * * @param xOffset * offset in X direction * @param yOffset * offset in Y direction */public void showDropDown(int xOffset, int yOffset) {preShow();window.setAnimationStyle(R.style.Animations_PopDownMenu);window.showAsDropDown(anchor, xOffset, yOffset);}/** * Displays like a QuickAction from the anchor view. */public void showLikeQuickAction() {showLikeQuickAction(0, 0);}/** * Displays like a QuickAction from the anchor view. * * @param xOffset * offset in the X direction * @param yOffset * offset in the Y direction */public void showLikeQuickAction(int xOffset, int yOffset) {preShow();window.setAnimationStyle(R.style.Animations_PopUpMenu_Center);int[] location = new int[2];anchor.getLocationOnScreen(location);Rect anchorRect =new Rect(location[0], location[1], location[0] + anchor.getWidth(), location[1]+ anchor.getHeight());root.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));root.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);int rootWidth = root.getMeasuredWidth();int rootHeight = root.getMeasuredHeight();int screenWidth = windowManager.getDefaultDisplay().getWidth();//int screenHeight = windowManager.getDefaultDisplay().getHeight();int xPos = ((screenWidth - rootWidth) / 2) + xOffset;int yPos = anchorRect.top - rootHeight + yOffset;// display on bottomif (rootHeight > anchorRect.top) {yPos = anchorRect.bottom + yOffset;window.setAnimationStyle(R.style.Animations_PopDownMenu_Center);}window.showAtLocation(anchor, Gravity.NO_GRAVITY, xPos, yPos);}public void dismiss() {window.dismiss();}}
Main. xml
<?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:orientation="vertical" android:background="@drawable/bg"> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/btn" /></LinearLayout>
Action_item.xml
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="horizontal"android:layout_width="fill_parent"android:layout_height="wrap_content" android:clickable="true"android:focusable="true"android:background="@drawable/action_item_btn"> <ImageViewandroid:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="wrap_content"/><TextView android:id="@+id/title"android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center_vertical"android:paddingLeft="5dip"android:paddingRight="10dip"android:text="Chart"android:textColor="#fff"/> </LinearLayout>
Quick_popup.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <ScrollView android:id="@+id/scroller"android:layout_marginTop="16dip" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/quick_popup" android:fadingEdgeLength="5dip" android:scrollbars="none"> <LinearLayout android:id="@+id/tracks" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:padding="0dip"/> </ScrollView > <ImageView android:id="@+id/arrow_up" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/quick_arrow_up" /> <ImageView android:id="@+id/arrow_down" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/scroller" android:layout_marginTop="-4dip" android:src="@drawable/quick_arrow_down" /></RelativeLayout>
Code: http://download.csdn.net/detail/niejing654092427/4406118