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

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);
}
希望以后可以用上这个转换

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以通过使用属性动画来实现点击 ImageView 图片转圈的效果。下面是一个简单的示例代码: ```java import android.animation.ObjectAnimator; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.animation.LinearInterpolator; import android.widget.ImageView; public class MainActivity extends AppCompatActivity { private ImageView imageView; private ObjectAnimator rotationAnimator; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = findViewById(R.id.imageView); // 设置属性动画 rotationAnimator = ObjectAnimator.ofFloat(imageView, "rotation", 0f, 360f); rotationAnimator.setDuration(1000); // 设置动画时长为1秒 rotationAnimator.setInterpolator(new LinearInterpolator()); // 设置动画插值器为线性插值器 rotationAnimator.setRepeatCount(ObjectAnimator.INFINITE); // 设置动画重复次数为无限次 rotationAnimator.setRepeatMode(ObjectAnimator.RESTART); // 设置动画重复模式为重新开始 imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (rotationAnimator.isRunning()) { rotationAnimator.cancel(); // 如果动画正在进行,则取消动画 } else { rotationAnimator.start(); // 否则开始动画 } } }); } } ``` 这段代码首先获取到一个 ImageView 实例,然后创建了一个属性动画 `rotationAnimator` 来实现图片的旋转效果。在点击 ImageView 的时候,通过判断动画是否正在进行来决定是开始动画还是取消动画。注意需要在布局文件中添加一个 ImageView,并将其 id 设置为 `imageView`。 希望这可以帮到你!如果还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值