• Tutorials
  • Tips & Tricks
  • Applications
  • News

Android Trainee

  • Tutorials
  • Tips & Tricks
  • Applications
  • News
Home  /  Tutorials  /  Android New Quick Action Animation.
15 July 2015

Android New Quick Action Animation.

Written by admin@androidtrainee
Tutorials Android Animation, New Quick Action, Quick Action, Quick Action Animation 1 Comment

 

—>  AndroidManifest.xml


<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.NewQuickAction.android"
android:versionCode="1"
android:versionName="1.0">

<application android:icon="@drawable/icon" android:label="@string/app_name">

<activity android:name=".QuickActionActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<activity android:name=".Example1Activity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
</intent-filter>
</activity>

<activity android:name=".Example2Activity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
</intent-filter>
</activity>

</application>

</manifest>

 

res/values

 

styles.xml

 


<?xml version="1.0" encoding="utf-8"?>

<resources>
<style name="Animations" />

<!-- PopDownMenu -->
<style name="Animations.PopDownMenu" />

<style name="Animations.PopDownMenu.Left">
<item name="@android:windowEnterAnimation">@anim/grow_from_topleft_to_bottomright</item>
<item name="@android:windowExitAnimation">@anim/shrink_from_bottomright_to_topleft</item>
</style>

<style name="Animations.PopDownMenu.Right">
<item name="@android:windowEnterAnimation">@anim/grow_from_topright_to_bottomleft</item>
<item name="@android:windowExitAnimation">@anim/shrink_from_bottomleft_to_topright</item>
</style>

<style name="Animations.PopDownMenu.Center">
<item name="@android:windowEnterAnimation">@anim/grow_from_top</item>
<item name="@android:windowExitAnimation">@anim/shrink_from_bottom</item>
</style>

<!-- PopUpMenu -->
<style name="Animations.PopUpMenu" />

<style name="Animations.PopUpMenu.Left">
<item name="@android:windowEnterAnimation">@anim/grow_from_bottomleft_to_topright</item>
<item name="@android:windowExitAnimation">@anim/shrink_from_topright_to_bottomleft</item>
</style>

<style name="Animations.PopUpMenu.Right">
<item name="@android:windowEnterAnimation">@anim/grow_from_bottomright_to_topleft</item>
<item name="@android:windowExitAnimation">@anim/shrink_from_topleft_to_bottomright</item>
</style>

<style name="Animations.PopUpMenu.Center">
<item name="@android:windowEnterAnimation">@anim/grow_from_bottom</item>
<item name="@android:windowExitAnimation">@anim/shrink_from_top</item>
</style>
</resources>

 

res/layout

action_item.xml


<?xml version="1.0" encoding="utf-8"?>

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical|center_horizontal"
android:paddingTop="0dip"
android:paddingBottom="0dip"
android:paddingLeft="20dip"
android:paddingRight="20dip"
android:clickable="true"
android:background="@drawable/quickaction_slider_btn">

<ImageView
android:id="@+id/iv_icon"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>

<TextView
android:id="@+id/tv_title"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_vertical|center_horizontal"
android:textSize="12sp"
android:textColor="#666"/>

</LinearLayout>

 

example1.xml

 


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="17dp"
android:textStyle="bold"
android:text="New Quickaction Demo"/>

<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:padding="30dp"
android:text="Button 1"/>

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"/>

<Button
android:id="@+id/btn2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="30dp"
android:text="Button 2" />

</LinearLayout>

 

example2.xml

 


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="17dp"
android:textStyle="bold"
android:text="New Quickaction Demo"/>

<ListView
android:id="@+id/l_list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"/>

</LinearLayout>

list.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"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:gravity="center_vertical">

<ImageView
android:id="@+id/i_more"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_list_more"/>

<TextView
android:id="@+id/t_name"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@id/i_more"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Text"/>

</RelativeLayout>

 

main.xml

 


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:textSize="17dp"
android:textStyle="bold"
android:text="New Quickaction Demo"/>

<Button
android:id="@+id/btn1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="Example 1"/>

<Button
android:id="@+id/btn2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="Example 2 (Listview)"/>

</LinearLayout>

 

quickaction.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">

<FrameLayout
android:layout_marginTop="10dip"
android:id="@+id/header2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/quickaction_top_frame"/>

<ImageView
android:id="@+id/arrow_up"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/quickaction_arrow_up" />

<HorizontalScrollView
android:id="@+id/scroll"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:fadingEdgeLength="0dip"
android:layout_below="@id/header2"
android:paddingLeft="1dip"
android:background="@drawable/quickaction_slider_background"
android:scrollbars="none">

<LinearLayout
android:id="@+id/tracks"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="4dip"
android:paddingBottom="4dip"
android:orientation="horizontal">

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/quickaction_slider_grip_left" />

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/quickaction_slider_grip_right" />

</LinearLayout>

</HorizontalScrollView>

<FrameLayout
android:id="@+id/footer"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/scroll"
android:background="@drawable/quickaction_bottom_frame" />

<ImageView
android:id="@+id/arrow_down"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="-1dip"
android:layout_below="@id/footer"
android:src="@drawable/quickaction_arrow_down" />

</RelativeLayout>

 

 

res/drawable

quickaction_slider_btn.xml


<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:dither="true">

<item android:state_checked="true"
android:drawable="@drawable/quickaction_slider_btn_on" />
<item android:state_window_focused="false"
android:drawable="@drawable/quickaction_slider_btn_normal" />
<item android:state_pressed="true"
android:drawable="@drawable/quickaction_slider_btn_pressed" />
<item android:state_focused="true"
android:drawable="@drawable/quickaction_slider_btn_selected" />
<item
android:drawable="@drawable/quickaction_slider_btn_normal" />

</selector>

ic_accept ic_add ic_list_more ic_list_more_selected ic_up quickaction_arrow_down quickaction_arrow_up quickaction_bottom_frame.9 quickaction_slider_background quickaction_slider_btn_normal.9 quickaction_slider_btn_on.9 quickaction_slider_btn_pressed.9 quickaction_slider_btn_selected.9 quickaction_slider_grip_left quickaction_slider_grip_right quickaction_top_frame.9 quickcontact_drop_shadow.9 textfield_default.9

 

 

 

 

 

 

res/anim

grow_from_bottom.xml


<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:fromXScale="0.3" android:toXScale="1.0"
android:fromYScale="0.3" android:toYScale="1.0"
android:pivotX="50%" android:pivotY="100%"
android:duration="@android:integer/config_shortAnimTime"
/>
<alpha
android:interpolator="@android:anim/decelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="@android:integer/config_shortAnimTime"
/>
</set>

grow_from_bottomleft_to_topright.xml


<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:fromXScale="0.3" android:toXScale="1.0"
android:fromYScale="0.3" android:toYScale="1.0"
android:pivotX="0%" android:pivotY="50%"
android:duration="@android:integer/config_shortAnimTime"
/>
<alpha
android:interpolator="@android:anim/decelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="@android:integer/config_shortAnimTime"
/>
</set>

 

grow_from_bottomright_to_topleft.xml

 


<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:fromXScale="0.3" android:toXScale="1.0"
android:fromYScale="0.3" android:toYScale="1.0"
android:pivotX="100%" android:pivotY="50%"
android:duration="@android:integer/config_shortAnimTime"
/>
<alpha
android:interpolator="@android:anim/decelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="@android:integer/config_shortAnimTime"
/>
</set>

 

grow_from_top.xml

 


<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:fromXScale="0.3" android:toXScale="1.0"
android:fromYScale="0.3" android:toYScale="1.0"
android:pivotX="50%" android:pivotY="0%"
android:duration="@android:integer/config_shortAnimTime"
/>
<alpha
android:interpolator="@android:anim/decelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="@android:integer/config_shortAnimTime"
/>
</set>

grow_from_topleft_to_bottomright.xml


<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:fromXScale="0.3" android:toXScale="1.0"
android:fromYScale="0.3" android:toYScale="1.0"
android:pivotX="0%" android:pivotY="0%"
android:duration="@android:integer/config_shortAnimTime"
/>
<alpha
android:interpolator="@android:anim/decelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="@android:integer/config_shortAnimTime"
/>
</set>

 

grow_from_topright_to_bottomleft.xml

 


<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:fromXScale="0.3" android:toXScale="1.0"
android:fromYScale="0.3" android:toYScale="1.0"
android:pivotX="100%" android:pivotY="0%"
android:duration="@android:integer/config_shortAnimTime"
/>
<alpha
android:interpolator="@android:anim/decelerate_interpolator"
android:fromAlpha="0.0" android:toAlpha="1.0"
android:duration="@android:integer/config_shortAnimTime"
/>
</set>

 

rail.xml

 


<?xml version="1.0" encoding="utf-8"?>

<translate
xmlns:android="http://schemas.android.com/apk/res/android"
android:fromXDelta="100%p"
android:toXDelta="0"
android:duration="325" />

 

shrink_from_bottom.xml

 


<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:fromXScale="1.0" android:toXScale="0.3"
android:fromYScale="1.0" android:toYScale="0.3"
android:pivotX="50%" android:pivotY="0%"
android:duration="@android:integer/config_shortAnimTime"
/>
<alpha
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0"
android:duration="@android:integer/config_shortAnimTime"
/>
</set>

 

shrink_from_bottomleft_to_topright.xml

 


<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:fromXScale="1.0" android:toXScale="0.3"
android:fromYScale="1.0" android:toYScale="0.3"
android:pivotX="100%" android:pivotY="0%"
android:duration="@android:integer/config_shortAnimTime"
/>
<alpha
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0"
android:duration="@android:integer/config_shortAnimTime"
/>
</set>

shrink_from_bottomright_to_topleft.xml


<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:fromXScale="1.0" android:toXScale="0.3"
android:fromYScale="1.0" android:toYScale="0.3"
android:pivotX="0%" android:pivotY="0%"
android:duration="@android:integer/config_shortAnimTime"
/>
<alpha
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0"
android:duration="@android:integer/config_shortAnimTime"
/>
</set>

shrink_from_top.xml

 


<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:fromXScale="1.0" android:toXScale="0.3"
android:fromYScale="1.0" android:toYScale="0.3"
android:pivotX="50%" android:pivotY="100%"
android:duration="@android:integer/config_shortAnimTime"
/>
<alpha
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0"
android:duration="@android:integer/config_shortAnimTime"
/>
</set>

 

shrink_from_topleft_to_bottomright.xml

 


<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:fromXScale="1.0" android:toXScale="0.3"
android:fromYScale="1.0" android:toYScale="0.3"
android:pivotX="100%" android:pivotY="100%"
android:duration="@android:integer/config_shortAnimTime"
/>
<alpha
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0"
android:duration="@android:integer/config_shortAnimTime"
/>
</set>

 

shrink_from_topright_to_bottomleft.xml


<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:fromXScale="1.0" android:toXScale="0.3"
android:fromYScale="1.0" android:toYScale="0.3"
android:pivotX="0%" android:pivotY="100%"
android:duration="@android:integer/config_shortAnimTime"
/>
<alpha
android:interpolator="@android:anim/accelerate_interpolator"
android:fromAlpha="1.0" android:toAlpha="0.0"
android:duration="@android:integer/config_shortAnimTime"
/>
</set>

 

ActionItem.java

 


package com.NewQuickAction.android;

import android.graphics.drawable.Drawable;
import android.graphics.Bitmap;

public class ActionItem {
private Drawable icon;
private Bitmap thumb;
private String title;
private int actionId = -1;
private boolean selected;
private boolean sticky;

public ActionItem(int actionId, String title, Drawable icon) {
this.title = title;
this.icon = icon;
this.actionId = actionId;
}

public ActionItem() {
this(-1, null, null);
}

public ActionItem(int actionId, String title) {
this(actionId, title, null);
}

public ActionItem(Drawable icon) {
this(-1, null, icon);
}

public ActionItem(int actionId, Drawable icon) {
this(actionId, null, icon);
}

public void setTitle(String title) {
this.title = title;
}

public String getTitle() {
return this.title;
}

public void setIcon(Drawable icon) {
this.icon = icon;
}

public Drawable getIcon() {
return this.icon;
}

public void setActionId(int actionId) {
this.actionId = actionId;
}

public int getActionId() {
return actionId;
}

public void setSticky(boolean sticky) {
this.sticky = sticky;
}

public boolean isSticky() {
return sticky;
}

public void setSelected(boolean selected) {
this.selected = selected;
}

public boolean isSelected() {
return this.selected;
}

public void setThumb(Bitmap thumb) {
this.thumb = thumb;
}

public Bitmap getThumb() {
return this.thumb;
}
}

 

Example1Activity.java


package com.NewQuickAction.android;

import android.os.Bundle;
import android.app.Activity;

import android.widget.Button;
import android.widget.Toast;
import android.view.View;
import android.view.View.OnClickListener;

public class Example1Activity extends Activity {
private static final int ID_ADD = 1;
private static final int ID_ACCEPT = 2;
private static final int ID_UPLOAD = 3;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.example1);

ActionItem addItem         = new ActionItem(ID_ADD, "Add", getResources().getDrawable(R.drawable.ic_add));
ActionItem acceptItem     = new ActionItem(ID_ACCEPT, "Accept", getResources().getDrawable(R.drawable.ic_accept));
ActionItem uploadItem     = new ActionItem(ID_UPLOAD, "Upload", getResources().getDrawable(R.drawable.ic_up));

//use setSticky(true) to disable QuickAction dialog being dismissed after an item is clicked
uploadItem.setSticky(true);

final QuickAction mQuickAction     = new QuickAction(this);

mQuickAction.addActionItem(addItem);
mQuickAction.addActionItem(acceptItem);
mQuickAction.addActionItem(uploadItem);

//setup the action item click listener
mQuickAction.setOnActionItemClickListener(new QuickAction.OnActionItemClickListener() {
@Override
public void onItemClick(QuickAction quickAction, int pos, int actionId) {
ActionItem actionItem = quickAction.getActionItem(pos);

if (actionId == ID_ADD) {
Toast.makeText(getApplicationContext(), "Add item selected", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), actionItem.getTitle() + " selected", Toast.LENGTH_SHORT).show();
}
}
});

mQuickAction.setOnDismissListener(new QuickAction.OnDismissListener() {
@Override
public void onDismiss() {
Toast.makeText(getApplicationContext(), "Ups..dismissed", Toast.LENGTH_SHORT).show();
}
});

Button btn1 = (Button) this.findViewById(R.id.btn1);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mQuickAction.show(v);
}
});

Button btn2 = (Button) this.findViewById(R.id.btn2);
btn2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mQuickAction.show(v);
mQuickAction.setAnimStyle(QuickAction.ANIM_GROW_FROM_CENTER);
}
});
}
}

 

Example2Activity.java

 


package com.NewQuickAction.android;

import android.app.Activity;
import android.os.Bundle;

import android.view.View;

import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.PopupWindow;

public class Example2Activity extends Activity {

private int mSelectedRow = 0;

private ImageView mMoreIv = null;

private static final int ID_ADD = 1;
private static final int ID_ACCEPT = 2;
private static final int ID_UPLOAD = 3;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.example2);

ListView mList             = (ListView) findViewById(R.id.l_list);

NewQAAdapter adapter     = new NewQAAdapter(this);

final String[] data     = {"Test 01", "Test 02", "Test 03", "Test 04", "Test 05", "Test 06", "Test 07", "Test 08",
"Test 09", "Test 10"};

adapter.setData(data);
mList.setAdapter(adapter);

ActionItem addItem         = new ActionItem(ID_ADD, "Add", getResources().getDrawable(R.drawable.ic_add));
ActionItem acceptItem     = new ActionItem(ID_ACCEPT, "Accept", getResources().getDrawable(R.drawable.ic_accept));
ActionItem uploadItem     = new ActionItem(ID_UPLOAD, "Upload", getResources().getDrawable(R.drawable.ic_up));

final QuickAction mQuickAction     = new QuickAction(this);

mQuickAction.addActionItem(addItem);
mQuickAction.addActionItem(acceptItem);
mQuickAction.addActionItem(uploadItem);

//setup the action item click listener
mQuickAction.setOnActionItemClickListener(new QuickAction.OnActionItemClickListener() {
@Override
public void onItemClick(QuickAction quickAction, int pos, int actionId) {
ActionItem actionItem = quickAction.getActionItem(pos);

if (actionId == ID_ADD) { //Add item selected
Toast.makeText(getApplicationContext(), "Add item selected on row " + mSelectedRow, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getApplicationContext(), actionItem.getTitle() + " item selected on row "
+ mSelectedRow, Toast.LENGTH_SHORT).show();
}
}
});

//setup on dismiss listener, set the icon back to normal
mQuickAction.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
mMoreIv.setImageResource(R.drawable.ic_list_more);
}
});

mList.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mSelectedRow = position; //set the selected row

mQuickAction.show(view);

//change the right arrow icon to selected state
mMoreIv = (ImageView) view.findViewById(R.id.i_more);
mMoreIv.setImageResource(R.drawable.ic_list_more_selected);
}
});
}
}

 

NewQAAdapter.java


package com.NewQuickAction.android;

import android.view.View;
import android.view.ViewGroup;
import android.view.LayoutInflater;

import android.content.Context;

import android.widget.BaseAdapter;
import android.widget.TextView;

public class NewQAAdapter extends BaseAdapter {
private LayoutInflater mInflater;
private String[] data;

public NewQAAdapter(Context context) {
mInflater = LayoutInflater.from(context);
}

public void setData(String[] data) {
this.data = data;
}

@Override
public int getCount() {
return data.length;
}

@Override
public Object getItem(int item) {
return data[item];
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;

if (convertView == null) {
convertView    = mInflater.inflate(R.layout.list, null);

holder         = new ViewHolder();

holder.mTitleText    = (TextView) convertView.findViewById(R.id.t_name);

convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}

holder.mTitleText.setText(data[position]);

return convertView;
}

static class ViewHolder {
TextView mTitleText;
}
}

 

PopupWindows.java


package com.NewQuickAction.android;

import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;

import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnTouchListener;

import android.widget.PopupWindow;
import android.content.Context;

public class PopupWindows {
protected Context mContext;
protected PopupWindow mWindow;
protected View mRootView;
protected Drawable mBackground = null;
protected WindowManager mWindowManager;

public PopupWindows(Context context) {
mContext    = context;
mWindow     = new PopupWindow(context);

mWindow.setTouchInterceptor(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
mWindow.dismiss();

return true;
}

return false;
}
});

mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
}

protected void onDismiss() {
}

protected void onShow() {
}

protected void preShow() {
if (mRootView == null)
throw new IllegalStateException("setContentView was not called with a view to display.");

onShow();

if (mBackground == null)
mWindow.setBackgroundDrawable(new BitmapDrawable());
else
mWindow.setBackgroundDrawable(mBackground);

mWindow.setWidth(WindowManager.LayoutParams.WRAP_CONTENT);
mWindow.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
mWindow.setTouchable(true);
mWindow.setFocusable(true);
mWindow.setOutsideTouchable(true);

mWindow.setContentView(mRootView);
}

public void setBackgroundDrawable(Drawable background) {
mBackground = background;
}

public void setContentView(View root) {
mRootView = root;

mWindow.setContentView(root);
}

public void setContentView(int layoutResID) {
LayoutInflater inflator = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

setContentView(inflator.inflate(layoutResID, null));
}

public void setOnDismissListener(PopupWindow.OnDismissListener listener) {
mWindow.setOnDismissListener(listener);
}

public void dismiss() {
mWindow.dismiss();
}
}

 

QuickAction.java

 


package com.NewQuickAction.android;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;

import android.graphics.Rect;
import android.graphics.drawable.Drawable;

import android.widget.ImageView;
import android.widget.TextView;
import android.widget.PopupWindow.OnDismissListener;

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.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.Interpolator;

public class QuickAction extends PopupWindows implements OnDismissListener {
private ImageView mArrowUp;
private ImageView mArrowDown;
private Animation mTrackAnim;
private LayoutInflater inflater;
private ViewGroup mTrack;
private OnActionItemClickListener mItemClickListener;
private OnDismissListener mDismissListener;

private List<ActionItem> mActionItemList = new ArrayList<ActionItem>();

private boolean mDidAction;
private boolean mAnimateTrack;

private int mChildPos;
private int mAnimStyle;

public static final int ANIM_GROW_FROM_LEFT = 1;
public static final int ANIM_GROW_FROM_RIGHT = 2;
public static final int ANIM_GROW_FROM_CENTER = 3;
public static final int ANIM_AUTO = 4;

public QuickAction(Context context) {
super(context);

inflater     = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

mTrackAnim     = AnimationUtils.loadAnimation(context, R.anim.rail);

mTrackAnim.setInterpolator(new Interpolator() {
public float getInterpolation(float t) {
// Pushes past the target area, then snaps back into place.
// Equation for graphing: 1.2-((x*1.6)-1.1)^2
final float inner = (t * 1.55f) - 1.1f;

return 1.2f - inner * inner;
}
});

setRootViewId(R.layout.quickaction);

mAnimStyle        = ANIM_AUTO;
mAnimateTrack    = true;
mChildPos        = 0;
}

public ActionItem getActionItem(int index) {
return mActionItemList.get(index);
}

public void setRootViewId(int id) {
mRootView    = (ViewGroup) inflater.inflate(id, null);
mTrack         = (ViewGroup) mRootView.findViewById(R.id.tracks);

mArrowDown     = (ImageView) mRootView.findViewById(R.id.arrow_down);
mArrowUp     = (ImageView) mRootView.findViewById(R.id.arrow_up);

mRootView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

setContentView(mRootView);
}

public void mAnimateTrack(boolean mAnimateTrack) {
this.mAnimateTrack = mAnimateTrack;
}

public void setAnimStyle(int mAnimStyle) {
this.mAnimStyle = mAnimStyle;
}

public void addActionItem(ActionItem action) {
mActionItemList.add(action);

String title     = action.getTitle();
Drawable icon     = action.getIcon();

View container    = (View) inflater.inflate(R.layout.action_item, null);

ImageView img     = (ImageView) container.findViewById(R.id.iv_icon);
TextView text     = (TextView) container.findViewById(R.id.tv_title);

if (icon != null) {
img.setImageDrawable(icon);
} else {
img.setVisibility(View.GONE);
}

if (title != null) {
text.setText(title);
} else {
text.setVisibility(View.GONE);
}

final int pos         =  mChildPos;
final int actionId     = action.getActionId();

container.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (mItemClickListener != null) {
mItemClickListener.onItemClick(QuickAction.this, pos, actionId);
}

if (!getActionItem(pos).isSticky()) {
mDidAction = true;

v.post(new Runnable() {
@Override
public void run() {
dismiss();
}
});
}
}
});

container.setFocusable(true);
container.setClickable(true);

mTrack.addView(container, mChildPos+1);

mChildPos++;
}

public void setOnActionItemClickListener(OnActionItemClickListener listener) {
mItemClickListener = listener;
}

public void show (View anchor) {
preShow();

int[] location         = new int[2];

mDidAction             = false;

anchor.getLocationOnScreen(location);

Rect anchorRect     = new Rect(location[0], location[1], location[0] + anchor.getWidth(), location[1]
+ anchor.getHeight());

mRootView.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

int rootWidth         = mRootView.getMeasuredWidth();
int rootHeight         = mRootView.getMeasuredHeight();

int screenWidth     = mWindowManager.getDefaultDisplay().getWidth();

int xPos             = (screenWidth - rootWidth) / 2;
int yPos             = anchorRect.top - rootHeight;

boolean onTop        = true;

if (rootHeight > anchor.getTop()) {
yPos     = anchorRect.bottom;
onTop    = false;
}

showArrow(((onTop) ? R.id.arrow_down : R.id.arrow_up), anchorRect.centerX());

setAnimationStyle(screenWidth, anchorRect.centerX(), onTop);

mWindow.showAtLocation(anchor, Gravity.NO_GRAVITY, xPos, yPos);

if (mAnimateTrack) mTrack.startAnimation(mTrackAnim);
}

private void setAnimationStyle(int screenWidth, int requestedX, boolean onTop) {
int arrowPos = requestedX - mArrowUp.getMeasuredWidth()/2;

switch (mAnimStyle) {
case ANIM_GROW_FROM_LEFT:
mWindow.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Left : R.style.Animations_PopDownMenu_Left);
break;

case ANIM_GROW_FROM_RIGHT:
mWindow.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Right : R.style.Animations_PopDownMenu_Right);
break;

case ANIM_GROW_FROM_CENTER:
mWindow.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Center : R.style.Animations_PopDownMenu_Center);
break;

case ANIM_AUTO:
if (arrowPos <= screenWidth/4) {
mWindow.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Left : R.style.Animations_PopDownMenu_Left);
} else if (arrowPos > screenWidth/4 && arrowPos < 3 * (screenWidth/4)) {
mWindow.setAnimationStyle((onTop) ? R.style.Animations_PopUpMenu_Center : R.style.Animations_PopDownMenu_Center);
} else {
mWindow.setAnimationStyle((onTop) ? R.style.Animations_PopDownMenu_Right : R.style.Animations_PopDownMenu_Right);
}

break;
}
}

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);
}

public void setOnDismissListener(QuickAction.OnDismissListener listener) {
setOnDismissListener(this);

mDismissListener = listener;
}

@Override
public void onDismiss() {
if (!mDidAction && mDismissListener != null) {
mDismissListener.onDismiss();
}
}

public interface OnActionItemClickListener {
public abstract void onItemClick(QuickAction source, int pos, int actionId);
}

public interface OnDismissListener {
public abstract void onDismiss();
}
}

 

QuickActionActivity.java


package com.NewQuickAction.android;

import android.os.Bundle;
import android.content.Intent;
import android.app.Activity;
import android.widget.Button;

import android.view.View;

public class QuickActionActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Button example1Btn    = (Button) findViewById(R.id.btn1);
Button example2Btn    = (Button) findViewById(R.id.btn2);

example1Btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(getApplicationContext(), Example1Activity.class));
}
});

example2Btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(getApplicationContext(), Example2Activity.class));
}
});
}
}

 

admin@androidtrainee

 Previous Article Android satellite menu Animation.

Related Posts

  • Android satellite menu Animation.

    July 15, 2015
  • Android Staggered Grid & List View.

    July 14, 2015
  • Draw Android Bar Chart With Animation.

    July 14, 2015

1 Comment

  1. your family Reply to your
    May 7, 2016 at 7:14 pm

    your continued educational values are appreciated by our team and continued involvment is requested , thx again ,and good work sir

Leave a Reply

Cancel reply

Tags

admob Advertising Networks AerServ Airpush android android ads android Advertising Networks Android App android chart animation Android GridView android L android lollipop androidmapv2 AppBrain AppFlood Appia AppKey Appnext AppOptim Appwiz chart chartview Epom Market google place api GridView Image Loader InMobi LeadBolt location map mapv2 mapv2 api material design Minimob Mobicow MobileCore MobiMicro NativeX Pingjam RevMob StarApplication startapp TapContext touched location Widdit

Count per Day

  • 347Reads yesterday:
  • 463790Total visitors:
  • 10Visitors today:
  • 2383Visitors per month:
  • 2Visitors currently online:
© Copyright 2014. Theme by BloomPixel.
Posting....