您的位置:首页 > 移动开发 > Android开发

android ImageView实现图片浏览器(点击左侧显示上一张,点击右侧显示下一张)

2015-01-18 15:39 1106 查看
1.实现代码如下:

public class MainActivity extends Activity {

private int[] mImages = { R.drawable.juxie, R.drawable.mojie,
R.drawable.sheshou, R.drawable.shizi, R.drawable.shuangyu,
R.drawable.shuangzi, R.drawable.shuiping, R.drawable.tiancheng,
R.drawable.tianxie };
private String[] mImageNames = { "巨蟹座", "摩羯座", "射手座", "狮子座", "双鱼座", "双子座",
"水平座", "天秤座", "天蝎座" };

private int mCurrentImage = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
final int width = metric.widthPixels;

final ImageView imgView = (ImageView) findViewById(R.id.image);

final EditText edit = (EditText) findViewById(R.id.edt);

imgView.setImageResource(mImages[0]);

edit.setText(mImageNames[0]);

imgView.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
if (event.getX() < width / 2) {
if (mCurrentImage == 0) {
mCurrentImage = mImages.length - 1;
} else {
mCurrentImage--;
}
} else {
if (mCurrentImage == mImages.length - 1) {
mCurrentImage = 0;
} else {
mCurrentImage++;
}
}
}

imgView.setImageResource(mImages[mCurrentImage]);
edit.setText(mImageNames[mCurrentImage]);
return true;
}
});

}
}


2.实现效果



3.该程序用到了获取屏幕大小的方法:

DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
final int width = metric.widthPixels;
为什么要获取pixel而不是dip呢,这是因为我查看了API后得出的结果,在onTouch()方法中通过event.getX();返回的正是pix。API中是这样说的:

getX
public final float getX()Returns the X coordinate of this event. <span style="color:#ff0000;">Whole numbers are pixels;</span> the value may have a fraction for input devices that are sub-pixel precise.


4.给出px和dip的转换:

public static int dip2px(Context context, float dipValue) {
float scale = context.getResources().getDisplayMetrics().density;
return (int) (dipValue * scale + 0.5f);
}

public static int px2dip(Context context, float pxValue) {
float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
希望以后可以用上这个转换
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐