gpt4 book ai didi

android - 如何在Android中以滑动效果在较小的ImageView中显示较大的图像?

转载 作者:行者123 更新时间:2023-12-03 13:12:38 25 4
gpt4 key购买 nike

我的图像尺寸为1000X400px。假设目标android设备的屏幕宽度为320px。我想从右向左滑动该图像。实际上,我想为我尝试制作的滑动2D滚动平台游戏执行此操作。所以请帮忙,因为我只是一个初学者(距离Android开发人员只有2周的时间。)

我在想是否可以使程序休眠一段时间,所以我做到了:

int START_X = 0;
int START_Y = 0;
final int WIDTH_PX = 320;
final int HEIGHT_PX = 400;

Bitmap SOURCE_BITMAP = BitmapFactory.decodeResource(getApplicationContext().getResources(), R.drawable.background);
Bitmap img = Bitmap.createBitmap(SOURCE_BITMAP, START_X, START_Y, WIDTH_PX, HEIGHT_PX, null, false);

bg=(ImageView)findViewById(R.id.imageView1);
bg.setImageBitmap(img);

try {
Thread.currentThread().sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

img = Bitmap.createBitmap(SOURCE_BITMAP, START_X+100, START_Y, WIDTH_PX, HEIGHT_PX, null, false);
bg.setImageBitmap(img);

try {
Thread.currentThread().sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}

img = Bitmap.createBitmap(SOURCE_BITMAP, START_X+200, START_Y, WIDTH_PX, HEIGHT_PX, null, false);
bg.setImageBitmap(img);

但它会在等待4000毫秒后直接执行最后一条语句,即
img = Bitmap.createBitmap(SOURCE_BITMAP, START_X+200, START_Y, WIDTH_PX, HEIGHT_PX, null, false);
bg.setImageBitmap(img);

最佳答案

首先:之所以只看到最后一个setImageBitmap(img)的效果,是因为该方法实际上并未停止所有操作并绘制位图。它只是将“绘制过程”设置在队列中,并在稍后进行处理。
即使使用Thread.sleep调用也无法渲染位图的原因是,因为您要冻结渲染屏幕的线程。 :)您编写的代码(除非您将其写在单独的线程中)与处理屏幕绘图的代码在同一线程上运行。如果冻结了……基本上就阻止了整个应用程序。

第二:如上所述,Thread.currentThread().sleep(2000)不是停止线程的好方法。 Android应用程序的主线程称为UI thread。如果您冻结了它,则您的ENTIRE应用程序将冻结。因此,无论如何都不要这样做。 :)改用AsyncTasks ...或postDelayed method of the Handler或其他方式。还有更多。

现在,回到手头的问题:

  • 如果要创建Android游戏,建议您查看libGDX游戏开发框架。
  • 但是,如果您不想直接进行此操作,执行上述操作的最简单方法是使用Animation。参见this小伙的答案。
  • 另一种方法可能是使用ValueAnimator,请参阅this。它的作用是...您设置一个开始和结束值,即screenWidth和0,并且设置持续时间(以毫秒为单位)。后面会发生一些“魔术”,并且会周期性地调用onAnimationUpdate方法,并使用您输入的开始值和结束值之间的值。您可以将该值设置为leftImageView位置。这可能会使View从右移到左并获得所需的效果。

  • 一种更高级的方法
    现在...想到的一个好方法是:
  • 创建一个覆盖ImageView类的类。
  • 在布局的.xml文件中进行设置,并将其设置为match_parent
  • 在其构造函数中,您可以将Bitmap值加载到内存中,并将其保留在Bitmap本地属性中。
  • 现在,您可以做的下一件事是重写onDrawImageView方法。
  • 在其中,您可以使用drawBitmap对象的Canvas方法。它接受一个srcRectdestRect,它们基本上描述了原始图像中的哪些块在ImageView's Canvas 上的位置。
  • 您可以有一个单独的线程来保持图像沿屏幕移动的持续时间,并且该线程可以调用invalidateImageView方法,从而强制调用onDraw方法,从而向左重画位图。
  • 关于android - 如何在Android中以滑动效果在较小的ImageView中显示较大的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24596462/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com