Android 는 제3자 로그 인의 위로 당기 기 전개,아래로 당기 기 숨 기기,아래로 당기 기 숨 기기 예제 구현

Android 의 UI 와 상호작용 은 매우 중요 한 부분 으로 사용자 가 소프트웨어 에 대한 체험 에 직접적인 영향 을 미친다.프로젝트 경험 이 쌓 이면 서 안 드 로 이 드 에서 애니메이션 의 활용 이 점점 중요 해 지 는 것 을 발견 했다.이 글 은 프로젝트 로그 인 인터페이스 에서 실 현 된 제3자 로그 인 을 추출 하여 사용 자 는 위로 끌 어 올 리 고 펼 칠 수 있 으 며 아래 에서 제3자 로그 인 이라는 효 과 를 숨 기 고 사용자 와 소프트웨어 의 상호작용 성 을 높 일 수 있다.
구현 효과:

(1)activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  xmlns:tools="http://schemas.android.com/tools" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent" 
  tools:context="com.example.propertyanimation.MainActivity"> 
 
  <RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:orientation="vertical"> 
 
    <RelativeLayout 
      android:id="@+id/re_ControlshowhideView" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_marginBottom="10dp" 
      android:orientation="vertical"> 
 
      <RelativeLayout 
        android:id="@+id/re_showarrowhead" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content"> 
 
        <View 
          android:layout_width="match_parent" 
          android:layout_height="0.1dp" 
          android:layout_marginLeft="12dp" 
          android:layout_marginRight="12dp" 
          android:layout_marginTop="17dip" 
          android:background="#dadada" /> 
 
        <ImageView 
          android:id="@+id/arrowhead" 
          android:layout_width="30dip" 
          android:layout_height="30dip" 
          android:layout_centerInParent="true" 
          android:src="@drawable/jiantoubelow" /> 
 
      </RelativeLayout> 
 
      <TextView 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_below="@id/re_showarrowhead" 
        android:layout_marginTop="10dp" 
        android:gravity="center" 
        android:text="-      -" /> 
 
    </RelativeLayout> 
 
    <RelativeLayout 
      android:id="@+id/showhideView" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@id/re_ControlshowhideView" 
      android:gravity="center" 
      android:visibility="gone" 
      android:orientation="vertical"> 
 
      <Button 
        android:id="@+id/btn_qq" 
        android:layout_width="40dp" 
        android:layout_height="57.5dp" 
        android:layout_gravity="center_vertical" 
        android:layout_marginLeft="10dp" 
        android:background="@drawable/qqlogin" 
        android:clickable="true" 
        android:gravity="center" 
        android:paddingLeft="10dp" 
        android:textSize="16sp" /> 
 
      <Button 
        android:id="@+id/btn_weixin" 
        android:layout_width="40dp" 
        android:layout_height="57.5dp" 
        android:layout_gravity="center_vertical" 
        android:layout_marginLeft="10dp" 
        android:layout_toRightOf="@+id/btn_qq" 
        android:background="@drawable/weixinlogin" 
        android:clickable="true" 
        android:gravity="center" 
        android:paddingLeft="10dp" 
        android:textSize="16sp" /> 
    </RelativeLayout> 
 
  </RelativeLayout> 
 
 
 
</RelativeLayout> 
(2)PropertyAnimation.java  이 파일 은 주로 실 현 된 속성 애니메이션 을 하나의 클래스 에 패키지 하 는데 이러한 기능 은 하나의 모듈 이 된다.다른 호출 자 들 도 편리 하 게 사용 할 수 있 습 니 다.

package com.example.propertyanimation; 
 
 
import android.animation.Animator; 
import android.animation.AnimatorListenerAdapter; 
import android.animation.ValueAnimator; 
import android.content.Context; 
import android.view.View; 
import android.view.ViewGroup; 
import android.view.animation.Animation; 
import android.view.animation.RotateAnimation; 
 
public class PropertyAnimation { 
 
  private float mDensity; 
 
  private int mHiddenViewMeasuredHeight; //       ,               , 
                      //                。 
 
  public PropertyAnimation(Context context){ 
    //       ,               ,          ,         dp        。 
    mDensity = context.getResources().getDisplayMetrics().density; 
    mHiddenViewMeasuredHeight = (int) (mDensity * 57.5 + 0.5); 
  } 
 
  public void animateOpen(View v) { 
    v.setVisibility(View.VISIBLE); 
    //createDropAnimator()             
    ValueAnimator animator = createDropAnimator(v, 0, 
        mHiddenViewMeasuredHeight); 
    animator.start(); 
  } 
 
  /** 
   *             . 
   *            
   * @param view     
   */ 
  public void animationIvOpen(View view) { 
    //    ,    :new RotateAnimation(       ,       ,X      :     ABSOLUTE、 
    // RELATIVE_TO_SELF、RELATIVE_TO_PARENT,X      ,Y      :     ABSOLUTE、RELATIVE_TO_SELF、 
    // RELATIVE_TO_PARENT,Y      ); 
    RotateAnimation animation = new RotateAnimation(0, 180, 
        Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 
        0.5f); 
    //                  
    animation.setFillAfter(true); 
    //     
    animation.setDuration(100); 
    //          
    view.startAnimation(animation); 
  } 
 
  /** 
   *             . 
   *            
   * @param view 
   */ 
  public void animationIvClose(View view) { 
    RotateAnimation animation = new RotateAnimation(180, 0, 
        Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 
        0.5f); 
    animation.setFillAfter(true); 
    animation.setDuration(100); 
    view.startAnimation(animation); 
  } 
 
  /** 
   *        
   * 
   * @param view //        
   */ 
  public void animateClose(final View view) { 
    //        
    int origHeight = view.getHeight(); 
    //createDropAnimator()             
    ValueAnimator animator = createDropAnimator(view, origHeight, 0); 
    //       Animator.AnimatorListener      ,       AnimatorListenerAdapter。 
    //AnimatorListenerAdapter               ,               ,  AnimatorListenerAdapter      
    animator.addListener(new AnimatorListenerAdapter() { 
      @Override 
      public void onAnimationEnd(Animator animation) {  //        
        view.setVisibility(View.GONE); 
      } 
    }); 
    animator.start(); 
  } 
 
  /** 
   *          
   * 
   * @param v   //        
   * @param start //       
   * @param end  //       
   * @return 
   */ 
  private ValueAnimator createDropAnimator(final View v, int start, int end) { 
    //      ValueAnimator.ofInt       start end    
    ValueAnimator animator = ValueAnimator.ofInt(start, end); 
    // ValueAnimator  AnimatorUpdateListener   ,         
    //   ValueAnimator         ,             
    animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
 
      @Override 
      public void onAnimationUpdate(ValueAnimator arg0) { 
        //        
        int value = (int) arg0.getAnimatedValue(); 
        //          
        ViewGroup.LayoutParams layoutParams = v.getLayoutParams(); 
        //         
        layoutParams.height = value; 
        //               
        v.setLayoutParams(layoutParams); 
      } 
    }); 
    return animator; 
  } 
 
} 
(3)MainActivity.java 이 파일 은 봉 인 된 속성 애니메이션 을 사용 하기 시 작 했 습 니 다.

package com.example.propertyanimation; 
 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.RelativeLayout; 
import android.widget.Toast; 
 
public class MainActivity extends Activity implements View.OnClickListener{ 
 
  private ImageView mIv_arrowhead; 
 
  private RelativeLayout mHiddenLayout; 
 
  private PropertyAnimation propertyAnimation; 
 
  private Button btn_qq;  //QQ     
 
  private Button btn_weixin;  //       
 
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    //           
    propertyAnimation=new PropertyAnimation(this); 
    //  /             
    mIv_arrowhead = (ImageView) this.findViewById(R.id.arrowhead); 
    mIv_arrowhead.setOnClickListener(this); 
    //  /      
    mHiddenLayout = (RelativeLayout) this.findViewById(R.id.showhideView); 
    //QQ   
    btn_qq = (Button) this.findViewById(R.id.btn_qq); 
    btn_qq.setOnClickListener(this); 
    //     
    btn_weixin=(Button)this.findViewById(R.id.btn_weixin); 
    btn_weixin.setOnClickListener(this); 
 
  } 
 
  @Override 
  public void onClick(View v) { 
    switch (v.getId()) { 
      case R.id.arrowhead: 
        if (mHiddenLayout.getVisibility() == View.GONE) { 
          propertyAnimation.animateOpen(mHiddenLayout); 
          propertyAnimation.animationIvOpen(mIv_arrowhead); 
        } else { 
          propertyAnimation.animateClose(mHiddenLayout); 
          propertyAnimation.animationIvClose(mIv_arrowhead); 
        } 
        break; 
      case R.id.btn_qq:   //QQ     
        Toast.makeText(this,"QQ  ",Toast.LENGTH_SHORT).show(); 
        break; 
      case R.id.btn_weixin: //       
        Toast.makeText(this,"    ",Toast.LENGTH_SHORT).show(); 
        break; 
    } 
 
  } 
} 
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기