Я создаю GridView карт, используя CustomAddapter-ArrayList. Каждая ячейка содержит 2 изображения (только один вид на каждый щелчок или на обратной стороне карты). Для «переворачивания» я использую анимацию. Код работает нормально, единственная ячейка, которая не будет переворачиваться с анимацией, - это ячейка с позицией 0 (изображение1 изменится на изображение2, но без анимации). Потом я заметил, что-то, что может быть причиной этого, позиция 0 называется дважды в GetView за каждый кликGridView дважды вызывает «позицию 0»
I/System.out: position: 0
I/System.out: position: 0
I/System.out: position: 1
I/System.out: position: 2
I/System.out: position: 3
... // up to 20
Я пытался найти ответы на этом сайте, но они продолжали говорить о высоте расположения и Бесполезный Помогите. Не могли бы вы помочь мне?
CustomAdapter:
public class CustomAdapter extends ArrayAdapter<Square> {
final AnimatorSet setRightOut;
final AnimatorSet setLeftIn;
public CustomAdapter(GameActivity context, ArrayList<Square> list) {
super(context, 0, list);
setRightOut = (AnimatorSet) AnimatorInflater.loadAnimator(context,
R.animator.flip_right_out);
setLeftIn = (AnimatorSet) AnimatorInflater.loadAnimator(context,
R.animator.flight_left_in);
}
class ViewHolder {
public ImageView img1,img2; //img1=card's back, img2=card's front (random pic)
}
public View getView (int position, View convertView, ViewGroup parent){
ViewHolder viewHolder;
if (convertView == null)
{
convertView= LayoutInflater.from(getContext()).inflate(R.layout.row, null);
viewHolder=new ViewHolder();
viewHolder.img1 = (ImageView)
convertView.findViewById(R.id.imageView);
viewHolder.img2 = (ImageView) convertView.findViewById(R.id.imageView2);
convertView.setTag(viewHolder);//setting random pic}
else{viewHolder= (ViewHolder) convertView.getTag();}
System.out.println("position: " + position);
viewHolder.img2.setImageResource(getItem(position).id);
if (getItem(position).selected == 1) { //first flip
setRightOut.setTarget(viewHolder.img1);
setLeftIn.setTarget(viewHolder.img2);
setRightOut.start();
setLeftIn.start();
getItem(position).selected = 2; }
else (getItem(position).selected == 2) //card was flipped already- stay flipped
{
viewHolder.img2.setAlpha(1.0f);
viewHolder.img1.setAlpha(0.0f);
}
return convertView;
}}
активность макета:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:id="@+id/activity_game"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:background="#0f49b4"
tools:context="com.example.memory.GameActivity">
<GridView
android:layout_width="match_parent"
android:layout_height="410dp"
android:numColumns="4"
android:background="#d5e2e1"
android:id="@+id/gridView"
</GridView>
</LinearLayout>
строки XML:
?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="100dp"
android:layout_height="80dp">
<ImageView
android:layout_width="100dp"
android:layout_height="80dp"
android:id="@+id/imageView"
android:src="@drawable/q"/>
<ImageView
android:layout_width="100dp"
android:layout_height="80dp"
android:id="@+id/imageView2"
android:alpha="0"
/>
В моем случае очередь не поможет. Моя карта не переворачивается дважды, я думаю, у нее недостаточно времени, чтобы перевернуть первый вызов - он уже перескакивает ко второму вызову, и это означает, что он перейдет ко второму условию, которое удерживает карту флип-else (getItem (position) .selected == 2 «Я должен продолжать играть с условиями, которые, я думаю, но я чувствую, что это неправильно. Где еще я должен создать анимацию, если не в адаптере? – SHAI