gpt4 book ai didi

android - 如何在 android 3d 转换中使用 ListView 代替 ImageView

转载 作者:行者123 更新时间:2023-11-30 04:19:42 25 4
gpt4 key购买 nike

我正在使用另一个 ListView 代替 ImageView ,尝试按照示例应用程序中给出的方式进行 3d 转换。但是 ListView 出现在屏幕右侧而不是左侧,并且单词是倒置的。我的列表显示如下:

enter image description here

我的代码是:

public class EventListActivity extends ListActivity  {

private ListView lv1, lv2;
private ViewGroup mContainer;
private ArrayList<ArrayAdapter<String>> arr;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub

super.onCreate(savedInstanceState);
setContentView(R.layout.eventlist);
arr = new ArrayList<ArrayAdapter<String>>();
String[] eventlist = getResources().getStringArray(R.array.eventlist);
String[] eventlist1 = getResources().getStringArray(R.array.techc);
String[] eventlist2 = getResources().getStringArray(R.array.presc);
String[] eventlist3 = getResources().getStringArray(R.array.roboc);
String[] eventlist4 = getResources().getStringArray(R.array.managec);
String[] eventlist5 = getResources().getStringArray(R.array.literaryc);
String[] eventlist6 = getResources().getStringArray(R.array.creationc);
String[] eventlist7 = getResources().getStringArray(R.array.gamingc);
ArrayAdapter<String> a1 = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, eventlist1);
ArrayAdapter<String> a2 = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, eventlist2);
ArrayAdapter<String> a3 = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, eventlist3);
ArrayAdapter<String> a4 = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, eventlist4);
ArrayAdapter<String> a5 = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, eventlist5);
ArrayAdapter<String> a6 = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, eventlist6);
ArrayAdapter<String> a7 = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, eventlist7);
arr.add(a1);
arr.add(a3);
arr.add(a2);

arr.add(a4);
arr.add(a5);
arr.add(a6);
arr.add(a7);
final ArrayAdapter<String> a = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, eventlist);
lv1 = getListView();
lv2 = (ListView) findViewById(R.id.list2);
mContainer = (ViewGroup) findViewById(R.id.container);
lv1.setAdapter(a);
lv2.setClickable(true);
lv2.setFocusable(true);
mContainer
.setPersistentDrawingCache(ViewGroup.PERSISTENT_ANIMATION_CACHE);
lv1.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
lv2.setAdapter(arr.get(arg2));

applyRotation(arg2, 0, 90);

}
});

}

protected void applyRotation(int position, int start, int end) {
// TODO Auto-generated method stub
final float centerX = mContainer.getWidth() / 2.0f;
final float centerY = mContainer.getHeight() / 2.0f;

// Create a new 3D rotation with the supplied parameter
// The animation listener is used to trigger the next animation
final Rotate3dAnimation rotation = new Rotate3dAnimation(start, end,
centerX, centerY, 310.0f, true);
rotation.setDuration(500);
rotation.setFillAfter(true);
rotation.setInterpolator(new AccelerateInterpolator());
rotation.setAnimationListener(new DisplayNextView(position));

mContainer.startAnimation(rotation);
}

private final class DisplayNextView implements Animation.AnimationListener {
private final int mPosition;

private DisplayNextView(int position) {
mPosition = position;
}

public void onAnimationStart(Animation animation) {
}

public void onAnimationEnd(Animation animation) {
mContainer.post(new SwapViews(mPosition));
}

public void onAnimationRepeat(Animation animation) {
}
}

/**
* This class is responsible for swapping the views and start the second
* half of the animation.
*/
private final class SwapViews implements Runnable {
private final int mPosition;

public SwapViews(int position) {
mPosition = position;
}

public void run() {
final float centerX = mContainer.getWidth() / 2.0f;
final float centerY = mContainer.getHeight() / 2.0f;
Rotate3dAnimation rotation;

if (mPosition > -1) {
lv1.setVisibility(View.GONE);
lv2.setVisibility(View.VISIBLE);
lv2.requestFocus();

rotation = new Rotate3dAnimation(90, 180, centerX, centerY,
310.0f, false);
} else {
lv2.setVisibility(View.GONE);
lv1.setVisibility(View.VISIBLE);
lv1.requestFocus();

rotation = new Rotate3dAnimation(90, 0, centerX, centerY,
310.0f, false);
}

rotation.setDuration(500);
rotation.setFillAfter(true);
rotation.setInterpolator(new DecelerateInterpolator());

mContainer.startAnimation(rotation);
}
}}

我的xml代码是`

<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layoutAnimation="@anim/layout_bottom_to_top_slide"
android:persistentDrawingCache="animation|scrolling" />

<ListView
android:id="@+id/list2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:scaleType="fitCenter"
android:visibility="gone" />

`

如何让 ListView 处于正确的位置?

最佳答案

您可能将其旋转 180 度,这导致向后列表

你需要的是旋转到 360 度。虽然这会导致更多的“旋转”,但您可以通过以下方式伪造它:

将列表旋转90度。当列表旋转 90 度时我们看不到它,您可以用新列表替换您的列表。然后在 AnimationListener.onAnimationEnd() 中,您只需再一次动画列表从 270 到 360:

Rotate3dAnimation rotation = new Rotate3dAnimation(270, 360, centerX, centerY, 60.0f, false);

没有听完。

完整的动画结束:

public void onAnimationEnd(Animation animation) {       
// RENDER YOUR NEW LIST HERE

final float centerX = mContainer.getWidth() / 2.0f;
final float centerY = mContainer.getHeight() / 2.0f;

Rotate3dAnimation rotation = new Rotate3dAnimation(270, 360, centerX, centerY, 60.0f, false);

rotation.setDuration(500);
rotation.setFillAfter(true);
rotation.setInterpolator(new AccelerateInterpolator());
mContainer.startAnimation(rotation);
}

关于android - 如何在 android 3d 转换中使用 ListView 代替 ImageView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9454775/

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