我的弹出式imageview中的问题 [英] problem in my popup imageview

查看:50
本文介绍了我的弹出式imageview中的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



在我的项目中,如果用户点击一个图标,它将显示一个带滚动功能的弹出式图像视图。



我的问题是的,流行的图像应该是高分辨率,它应该可以调整所有类型的Android屏幕分辨率。



当用户点击图标时,图像应该是可调整的根据他们的模型或屏幕尺寸来推荐..



我的xml代码 -





< 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 =水平

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/>



活动文件 -



包com.fipl.quickaction;



import java.util .ArrayList;

import java.util.List;



import android.content.Context;

import android.graphics.Rect;

导入android.graphics.drawable.Drawable;

导入android.view.Gravity;

导入android.view .LayoutInflater;

导入android.view.View;

导入android.view.View.OnClickListener;

导入android.view.ViewGroup;

导入android.view.ViewGroup.LayoutParams;

导入android.view.animation.Animation;

导入android.view.animation.AnimationUtils ;

导入android.view.animation.Interpolator;

导入android.widget.ImageView;

导入android.widget.PopupWindow.OnDismissListener;

导入一个droid.widget.TextView;



import com.fipl.mouthy.R;

import com.parser.mouthy.ImageLoader1;



公共类QuickAction扩展PopupWindows实现OnDismissListener {

私有ImageView mArrowUp;

私有ImageView mArrowDown;

private动画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){

//推es越过目标区域,然后快速回到原位。

//图形方程式:1.2 - ((x * 1.6)-1.1)^ 2

最终浮动内部=(t * 1.55f) - 1.1f;

返回1.2f - 内部*内部;

}

});



setRootViewId(R.layout.quickaction);



mAnimStyle = ANIM_AUTO;

mAnimateTrack = true;

mChildPos = 0;

}



public ActionItem getActionItem(int index){

返回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);



//这是之前在show()方法中定义的,移动到这里以防止

//强制关闭发生

//快速点击视图以显示快速操作对话框。

// Thanx到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();

查看容器=(查看)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 (图片);

}其他{

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!= nul) l){

mItemClickListener.onItemClick(QuickAction.this,pos,

actionId);

}



if(!getActionItem(pos).isSticky()){

mDidAction = true;



//透明背景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; < br $>
}



public void show(查看主播){

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;



//显示在底部

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;



开关(mAnimStyle){

案例ANIM_GROW_FROM_LEFT:

mWindow.setAnimationStyle( (onTop)?R.style.Animations_PopUpMenu_Left

:R.style.Animations_PopDownMenu_Left);

休息;



案例ANIM_GROW_FROM_RIGHT:

mWindow.setAnimationStyle((onTop)? R.style.Animations_PopUpMenu_Right

:R.style.Animations_PopDownMenu_Right);

休息;



案例ANIM_GROW_FROM_CENTER:

mWindow.setAnimationStyle((onTop)?R.style.Animations_PopUpMenu_Center

:R.style.Animations_PopDownMenu_Center);

break;



案例ANIM_AUTO:

if(arrowPos< = screenWidth / 4){

mWindow.setAnimationStyle((onTop) ?R.style.Animations_PopUpMenu_Left

:R.style.Animations_PopDownMenu_Left);

}否则if(arrowPos> screenWidth / 4

& & arrowPos< 3 *(screenWidth / 4)){

mWindow.setAnimationStyle((onTop)?R.style.Animations_PopUpMenu_Center

:R.style.Animations_PopDownMenu_Center) ;

}否则{

mWindow.setAnimationStyle((onTop)?R.style.Animations_PopDownMenu_Right

:R.style.Animations_PopDownMenu_Right) ;

}



休息;

}

}



private void showArrow(int whichArrow,int requestedX){

final view showArrow =(whichArrow == R.id.arrow_up)? mArrowUp

:mArrowDown;

final查看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(查看。不可见);

}



public void setOnDismissListener(QuickAction.OnDismissListener listener){

setOnDismissListener(this );



mDismissListener =听众;

}



@Override

public void onDismiss(){

if(!mDidAction&& mDismissListener!= null){

mDismissListener.onDismiss(); < br $>
}

}



公共接口OnActionItemClickListener {

public abstract void onItemCli ck(QuickAction source,int pos,

int actionId);

}



public interface OnDismissListener {

公共抽象void onDismiss();

}

}



亲切指南我...



在此先感谢..

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

推荐答案

这是太长的代码来帮助你。总是尝试在你的imageview中使用
Thats too long code to help you. Always try to use
android:scaltype="fitXY"

并注意你的imageview布局的高度和宽度。创建不同的图像(尤其是xhdpi,hdpi,mdpi和ldpi),支持各种设备,并始终使用9补丁图像。

请仔细遵循这些说明:

图像大小适合所有设备 [ ^ ]

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[^]


这篇关于我的弹出式imageview中的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆