Click here to Skip to main content
15,896,201 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hi
In my project if the user clicks an icon , it will display a popup imageview with scrolling function.

my problem is, the pop image should be high resolution, and it should be adjustable for all type of android screen resolution.

when user clicks the icon , the image shoud be adjustable depond upon their fone models or screen size..

my xml code-


<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"> android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:removed="@drawable/pop_up_people"
android:orientation="vertical" >

<linearlayout> android:id="@+id/lin_scroll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="30dp"
android:layout_marginTop="40dp"
android:orientation="vertical" >

<scrollview>
android:id="@+id/scroller"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dip"
android:fadingEdgeLength="5dip" >

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

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

<ImageView
android:id="@+id/arrow_down"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/lin_scroll"
android:layout_marginTop="-4dip"
android:src="@drawable/arrow_down"
android:visibility="gone" />

Activity file--

package com.fipl.quickaction;

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

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.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.Interpolator;
import android.widget.ImageView;
import android.widget.PopupWindow.OnDismissListener;
import android.widget.TextView;

import com.fipl.mouthy.R;
import com.parser.mouthy.ImageLoader1;

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;

private Context ctx;
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);

ctx = context;
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);

// This was previously defined on show() method, moved here to prevent
// force close that occured
// when tapping fastly on a view to show quickaction dialog.
// Thanx to zammbi (github.com/zammbi)
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();
String image = action.getImage_path();
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);
if (!image.equals("")) {
ImageLoader1 loader = new ImageLoader1(img, ctx);
loader.execute(image);
} else {
img.setVisibility(View.INVISIBLE);
}
// } 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() {
public void onClick(View v) {
if (mItemClickListener != null) {
mItemClickListener.onItemClick(QuickAction.this, pos,
actionId);
}

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

// workaround for transparent background bug
// thx to Roman Wozniak <roman.wozniak@gmail.com>
v.post(new Runnable() {
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.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
// LayoutParams.WRAP_CONTENT));
mRootView.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

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

int screenWidth = mWindowManager.getDefaultDisplay().getWidth();
// int screenHeight = mWindowManager.getDefaultDisplay().getHeight();

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

boolean onTop = true;

// display on bottom
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.GONE);

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

kindly guide me..

Thanks in advance..
Posted
Updated 26-Jun-14 2:24am
v2
Comments
mathiazhagan01 26-Jun-14 6:02am    
Please share your code of popup imageview.

1 solution

Thats too long code to help you. Always try to use
XML
android:scaltype="fitXY"
inside your imageview and keep attention of your imageview layout's height and width.Create different images(especially xhdpi, hdpi, mdpi and ldpi) that supports wide range of devices and always use 9-patch images.
Follow these instructions carefully:
Image sizes to fit all devices[^]
 
Share this answer
 
v2

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900