2013-08-27 4 views
3

나는 안드로이드 개발에 상당히 익숙하며 몇 가지 간단한 응용 프로그램을 직접 만들고 있습니다. 애니메이션과 관련하여 문제가 발생했습니다. 특히 해당 셀을 클릭하면 gridview의 각 개별 셀에 플립 애니메이션이 표시됩니다.Android GridView 플립 애니메이션이 각 셀에 있습니까?

내 응용 프로그램이 전화에서 연락처를 검색하고 배열 어댑터를 사용하여 연락처 사진과 이름을 gridview에 표시합니다.

내가 원하는 것은 사용자가 플립 애니메이션을 수행하고 뒷면에 ​​연락처 전화 번호를 표시하는 연락처의 그리드 셀을 클릭하는 경우입니다. 사용자가 해당 셀을 다시 클릭하면 이름과 사진의 이전보기로 돌아갑니다.

나는 인터넷을 검색하고 몇 가지 자습서를 시도했지만 큰 도움이되지는 않았으며 그 중 누군가가 나를 혼란스럽게해야합니다. 누군가 도움이된다면 도움이 될 것입니다.

아래에 현재 코드를 게시합니다.

미리 감사드립니다.

이 코드는 연락처 정보를 검색하는 데 사용됩니다!

package content; 

import android.provider.MediaStore.Images; 

public class ContactBean { 
private String name; 
private String phoneNo; 
private String proPic; 

public String getName() { 
    return name; 
} 
public void setName(String name) { 
    this.name = name; 
} 
public String getPhoneNo() { 
    return phoneNo; 
} 
public void setPhoneNo(String phoneNo) { 
    this.phoneNo = phoneNo; 
} 

public String getProPic() { 
    return proPic; 
} 

public void setProPic(String proPic) { 
    this.proPic = proPic; 
} 

} 

ViewContatcsActivity

package viewContacts; 

import com.example.contactflipper.R; 

import content.ContactBean; 

import android.app.Activity; 
import android.app.AlertDialog; 
import android.content.DialogInterface; 
import android.database.Cursor; 
import android.graphics.Bitmap; 
import android.os.Bundle; 

import android.provider.ContactsContract; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.GridView; 
import android.widget.Toast; 
import android.widget.AdapterView.OnItemClickListener; 

import java.util.ArrayList; 
import java.util.Collections; 
import java.util.Comparator; 
import java.util.List; 


public class ViewContactsActivity extends Activity implements 
OnItemClickListener { 

private GridView listView; 
private List<ContactBean> list = new ArrayList<ContactBean>(); 

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

    listView = (GridView) findViewById(R.id.gridview); 
    listView.setOnItemClickListener(this); 
    String image_uri = ""; 
    Bitmap bitmap = null; 

    Cursor phones = getContentResolver().query(
      ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, 
      null, null); 
    while (phones.moveToNext()) { 

     String name = phones 
       .getString(phones 
         .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 

     String phoneNumber = phones 
       .getString(phones 
         .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

     image_uri = phones 
        .getString(phones 
         .getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_URI)); 

     ContactBean objContact = new ContactBean(); 
     objContact.setName(name); 

     objContact.setPhoneNo(phoneNumber); 
     list.add(objContact); 



    } 
    phones.close(); 

    GridAdapter objAdapter = new GridAdapter(
      ViewContactsActivity.this, R.layout.card_front, list); 
    listView.setAdapter(objAdapter); 

    if (null != list && list.size() != 0) { 
     Collections.sort(list, new Comparator<ContactBean>() { 

      @Override 
      public int compare(ContactBean lhs, ContactBean rhs) { 
       return lhs.getName().compareTo(rhs.getName()); 
      } 
     }); 
     AlertDialog alert = new AlertDialog.Builder(
       ViewContactsActivity.this).create(); 
     alert.setTitle(""); 

     alert.setMessage(list.size() + " Contact Found!!!"); 

     alert.setButton("OK", new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int which) { 
       dialog.dismiss(); 
      } 
     }); 
     alert.show(); 

    } else { 
     showToast("No Contact Found!!!"); 
    } 
} 

private void showToast(String msg) { 
    Toast.makeText(this, msg, Toast.LENGTH_SHORT).show(); 
} 

@Override 
public void onItemClick(AdapterView<?> listview, View v, int position, 
     long id) { 
    ContactBean bean = (ContactBean) listview.getItemAtPosition(position); 
    //implement something on the click of each listed item - bean 
} 

} 

GridAdapter

package viewContacts; 

import java.util.List; 

import com.example.contactflipper.R; 
import com.example.contactflipper.R.id; 

import content.ContactBean; 


import android.app.Activity; 
import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.drawable.Drawable; 
import android.text.Html; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class GridAdapter extends ArrayAdapter<ContactBean> { 

    private Activity activity; 
    private List<ContactBean> items; 
    private int row; 
    private ContactBean objBean; 


    public GridAdapter(Activity act, int row, List<ContactBean> items) { 
     super(act, row, items); 

     this.activity = act; 
     this.row = row; 
     this.items = items; 


    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     View view = convertView; 
     ViewHolder holder; 
     if (view == null) { 
      LayoutInflater inflater = (LayoutInflater) activity 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      view = inflater.inflate(row, null); 

      holder = new ViewHolder(); 
      view.setTag(holder); 
     } else { 
      holder = (ViewHolder) view.getTag(); 
     } 

     if ((items == null) || ((position + 1) > items.size())) 
      return view; 

     objBean = items.get(position); 

     holder.tvname = (TextView) view.findViewById(R.id.profileName); 
     //holder.tvPhoneNo = (TextView) view.findViewById(R.id.tvphone); 

     if (holder.tvname != null && null != objBean.getName() 
       && objBean.getName().trim().length() > 0) { 
      holder.tvname.setText(Html.fromHtml(objBean.getName())); 
     } 
     if (holder.tvPhoneNo != null && null != objBean.getPhoneNo() 
       && objBean.getPhoneNo().trim().length() > 0) { 
      holder.tvPhoneNo.setText(Html.fromHtml(objBean.getPhoneNo())); 
     } 
     if (holder.ivPic != null && null != objBean.getProPic() 
       && objBean.getProPic().trim().length() > 0) { 
      holder.ivPic.setBackground((Drawable) Html.fromHtml(objBean.getProPic())); 
     } 
     return view; 
    } 

    public class ViewHolder { 
     public TextView tvname, tvPhoneNo; 
     public ImageView ivPic; 
    } 

} 

ViewContactsFragment

package viewContacts; 

import com.example.contactflipper.R; 
import com.example.contactflipper.R.id; 
import com.example.contactflipper.R.layout; 

import content.AppDetails; 
import android.app.Activity; 
import android.app.Fragment; 
import android.content.res.Configuration; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.GridView; 

public class VCGridFragment extends Fragment { 


    public static GridView mGridview; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 

      View view = inflater.inflate(R.layout.menu_viewcon_grid, container, false); 
      Log.d("Called", "on Create View"); 
      return view; 
     } 

    //super.onCreateView(inflater, container, savedInstanceState); 
    @Override 
    public void onViewCreated(View view, Bundle savedInstanceState){ 
     super.onViewCreated(view, savedInstanceState); 
     Log.d("Called", "created Grid"); 
     mGridview = (GridView) view.findViewById(R.id.gridview); 


     Configuration config = getResources().getConfiguration(); 

     if(AppDetails.isTablet){ 

      if(config.orientation == Configuration.ORIENTATION_LANDSCAPE){ 
       mGridview.setNumColumns(4); 
      }else{ 
       mGridview.setNumColumns(3); 
      } 

     }else{ 
      if(config.orientation == Configuration.ORIENTATION_LANDSCAPE){ 
       mGridview.setNumColumns(3); 
      }else{ 
       mGridview.setNumColumns(2); 
      } 
     } 

     /* 
     mGridview.setOnItemClickListener(new onItemClickLitener(){ 

      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id){ 
       onGridItemClick((GridView) parent, view, position, id); 
      } 

     }); 
    } 

    public void onGridItemClick(GridView g, View v, int position, long id){ 
     Activity activity = getActivity(); 
    } 
    */ 
} 
} 

의 GridView XML -

,536,913 카드 XML의
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/contact_grid" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="center" 
    android:background="#ffffff" 
    android:scrollbars="none" 
    tools:context=".MainActivity" > 

    <FrameLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_gravity="center" 
     android:background="@drawable/gradient" 
     android:padding="10dp" > 

     <GridView 
      android:id="@+id/gridview" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_marginTop="50dp" 
      android:numColumns="2" 
      android:horizontalSpacing="8dp" 
      android:scrollbars="none" 
      android:verticalSpacing="8dp" > 

     </GridView> 

     <Button 
      android:id="@+id/backButton" 
      android:layout_width="100dp" 
      android:layout_height="wrap_content" 
      android:layout_gravity="top|right" 
      android:background="#8043BFC7" 
      android:text="@string/edit_contacts" 
      android:textColor="#ffffff" 
      android:textStyle="bold" /> 

    </FrameLayout> 

</RelativeLayout> 

FRONT - 카드 XML의

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="180dp" 
    android:layout_height="180dp" 
    android:orientation="vertical" > 

    <ImageView 
     android:id="@+id/profileThumb" 
     android:layout_width="match_parent" 
     android:layout_height="140dp" 
     ></ImageView> 

    <TextView 
     android:id="@+id/profileName" 
     android:layout_width="match_parent" 
     android:layout_height="40dp" 
     android:layout_gravity="bottom" 
     android:background="#40000000" 
     android:textColor="#ffffff" 
     android:textSize="22sp"> 
     </TextView> 


</LinearLayout> 

BACK -

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="180dp" 
    android:layout_height="180dp" 
    android:orientation="vertical" 
    android:background="#a6c" 
    android:padding="10dp" 
    android:gravity="bottom" 
    > 
    <TextView 
     android:id="@+id/infoName" 
     style="?android:textAppearanceLarge" 
     android:textStyle="bold" 
     android:textColor="#fff" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="HCKDAHOIW" 
     ></TextView> 

    <TextView 
     android:id="@+id/infoLocality" 
     style="?android:textAppearanceSmall" 
     android:textAllCaps="true" 
     android:textStyle="bold" 
     android:textColor="#80ffffff" 
     android:lineSpacingMultiplier="1.2" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="convoy" 
     ></TextView> 

    <TextView 
     android:id="@+id/infoEmail" 
     style="?android:textAppearanceSmall" 
     android:textColor="#80ffffff" 
     android:lineSpacingMultiplier="1.2" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="[email protected]" 
     ></TextView> 

    <TextView 
     android:id="@+id/infoNumber" 
     style="?android:textAppearanceSmall" 
     android:textColor="#80ffffff" 
     android:lineSpacingMultiplier="1.2" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="(086) 123 4567" 
     ></TextView> 

</LinearLayout> 
+0

2 명의 어린이 (앞면, 뒷면)가있는 ViewFlipper로 레이아웃을 확장 한 다음 ViewFlipper의 애니메이션을 설정하고 사용자가 클릭 할 때 표시되는 자녀를 앞 또는 뒤로 간단히 설정하는 것이 더 간단하지 않습니까? 그것? –

+1

네가 실제로 훨씬 더 간단하게 들린다. 내가 안드로이드에 상당히 익숙하다고 말했기 때문에 나는 아마 모든 것을 생각하고있을 것이다. 거기에 당신이 옳은 방향으로 나를 도울 수있는 알고 온라인 자습서 또는 샘플 있나요? @Reid – Harry117

답변

2

나는 그것에 대해 이런 식으로 뭔가를 갈 것입니다.

gridview에서 팽창시킬 레이아웃이며, view_flipper_layout이라는 레이아웃이 있다고 가정 해 보겠습니다. 물론 모든 textview 구성 요소 등을 앞면 또는 뒷면 linearlayout에 추가해야합니다.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <ViewFlipper 
     android:id="@+id/my_view_flipper" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" > 

     <LinearLayout 
      android:id="@+id/front" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical" > 

      <TextView 
       android:id="@+id/name" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Large Text" 
       android:textAppearance="?android:attr/textAppearanceLarge" /> 

     </LinearLayout> 

     <LinearLayout 
      android:id="@+id/back" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical" > 

      <ImageView 
       android:id="@+id/picture" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" /> 

     </LinearLayout> 

    </ViewFlipper> 

</LinearLayout> 

지금이 길을 갈하려고하면 그래서 그냥 가이드로 사용,의이 어댑터

public GridAdapter(Activity act, int row, List<ContactBean> items) { 
    super(act, row, items); 

    this.activity = act; 
    this.row = row; 
    this.items = items; 


} 


@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 

    View view = convertView; 
    ViewHolder holder; 
    if (view == null) { 
     LayoutInflater inflater = (LayoutInflater) activity 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     //here is where you inflate your layout containing your viewflipper 
     view = inflater.inflate(R.layout.view_flipper_layout, null); 

    } else { 
     holder = (ViewHolder) view.getTag(); 
    } 

    //reference the viewFlipper 
    ViewFlipper flipper = (viewFlipper) holder.findViewById(R.id.my_view_flipper); 
    //your front layout should be set to displayed be default 


    //now you can get get references to your textview or ImageViews contained within the layout 
    TextView name = (TextView) holder.findViewById(R.id.name); 
    name.setText("your text"); 

    ImageView picture = (ImageView) holder.findViewById(R.id.picture); 

    //now you set your onclick and pass it the current viewflipper to control the displayed child 
    flipper.setOnClickListener(new OnClickListener(){ 
     @Override 
     public void onClick(View click) { 

      flipViewFlipper(flipper); 

     } 

    }); 


    return view; 
} 


private void flipViewFlipper(ViewFlipper flipper){ 

    if(flipper.getDisplayedChild() == 0){ 
     flipper.setDisplayedChild(1); 
    } 
    else{ 
    flipper.setDisplayeChild(0); 
    } 

} 

}

내 머리에서이 타이핑라고 할 수 있습니다.

+0

감사합니다. 대단히 감사합니다. 이걸 시도해보고 다시 한번 감사 드려요. @ Reid – Harry117

+0

감사합니다 ... 나는 간단한 플립 카드 게임을 위해 그것을 사용합니다. 좋은 작품 – CoDe