在android中使用逐帧动画实现自定义progressbar组件

一 自定义progressbar
  <1>素材:逐帧图片若干张(根据自己loading组件的特点制作)
  <2>定义每张图片的显示的顺序及时间(定义帧动画列表)
      在res/drawable目录下,  创建一根标签为“animation-list”的xml文件,名称为:myloading.xml
   
   
         
         
         
     
     
 
    
    
    
    
    
     
   <3>定义progressbar布局
   在res/layout目录下创建一名称为:progressbar_item.xml的文件,具体内容如下:
   
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >


            android:id="@+id/myloading_image_id"
        android:layout_width="50dip"
        android:layout_height="50dip"
        android:layout_marginLeft="50dip"
        android:layout_marginTop="5dip"
        android:src="@drawable/myloading" />


            android:id="@+id/mylaodint_text_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dip"
        android:layout_marginLeft="18dip"
        android:text="正在加载,请稍后..."
        />

  <4>在自定义ProgressBarItem,java类中加载progressbar_item.xml,并启动动画,
   具体内容如下:
package com.example.myprogressbar.progressbar;


import com.example.myprogressbar.R;


import android.content.Context;
import android.graphics.drawable.AnimationDrawable;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;


public class ProgressBarItem extends LinearLayout
{


    public ProgressBarItem(Context context)
    {
        super(context);
        init( context);
    }
    public ProgressBarItem(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        init( context);
    }
    public ProgressBarItem(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
        init( context);
    }
    private void init(Context context)
    {
        LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View  progressBarItemView=(View)inflater.inflate(R.layout.progressbar_item, null);
        addView(progressBarItemView);
        ImageView progressImageView=(ImageView)this.findViewById(R.id.myloading_image_id);
        AnimationDrawable animationDrawable = (AnimationDrawable) progressImageView.getDrawable();
        animationDrawable.start();
    }
}
 二  使用自定义的progressbar组件
     <1>创建一Activity,及对应的布局文件:main_activity.xml
       
            xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="20dip"
    tools:context=".MainActivity" >


           android:id="@+id/begin_button_id"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="开始"
       />
         android:id="@+id/end_button_id"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_toRightOf="@id/begin_button_id"
       android:layout_marginLeft="15dip"
       android:text="结束"
       />
       android:id="@+id/myloading_item_id"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_marginTop="20dip"
       android:layout_centerHorizontal="true"
       android:layout_below="@id/end_button_id"
       android:visibility="invisible"
     />

 //---activity文件名称为:MainActivity
package com.example.myprogressbar;


import com.example.myprogressbar.progressbar.ProgressBarItem;


import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;


public class MainActivity extends Activity
{


    ProgressBarItem progressBar;
    Button startButton;
    Button endButton;
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        progressBar=(ProgressBarItem)this.findViewById(R.id.myloading_item_id);
        startButton=(Button)this.findViewById(R.id.begin_button_id);
        endButton=(Button)this.findViewById(R.id.end_button_id);
        
        startButton.setOnClickListener(ocl);
        endButton.setOnClickListener(ocl);
    }
    private View.OnClickListener ocl=new View.OnClickListener()
    {


        @Override
        public void onClick(View v)
        {
            switch(v.getId())
            {
                case R.id.begin_button_id:
                    progressBar.setVisibility(View.VISIBLE);
                    break;
                case R.id.end_button_id:
                    progressBar.setVisibility(View.GONE);
                    break;
            }
            
        }
        
    };
}

运行上面的程序,可以发现:1当“开始”按钮按下时,自定义loading显示,并运行。 2 当“结束”按钮按下时,自定义loading消失。

三源码下载地址:http://download.csdn.net/detail/swiftwoft/4958207

你可能感兴趣的:(android)