动画

1.view

package com.example.administrator.zkmn3;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.View;

public class CireleView extends View {

    private int radius;

    public CireleView(Context context) {
        super(context);
    }

    public CireleView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.CireleView);

        for (int i = 0; i <typedArray.length() ; i++) {
            int index = typedArray.getIndex(i);
            switch (i){
                case R.styleable.CireleView_radius:
                    radius = typedArray.getInt(index, 20);
                    break;
                case R.styleable.CireleView_color:
                    typedArray.getColor(index,Color.GREEN);
                    break;
            }

        }
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        //super.onMeasure(widthMeasureSpec, heightMeasureSpec);
     setMeasuredDimension(getMeasuredWidth(widthMeasureSpec),getMeasuredHeight(heightMeasureSpec));

    }

    private int getMeasuredHeight(int heightMeasureSpec) {
        int mode = MeasureSpec.getMode(heightMeasureSpec);
        int size = MeasureSpec.getSize(heightMeasureSpec);
        int result=0;
        if (mode==MeasureSpec.AT_MOST){
            result=getPaddingTop()+getPaddingBottom()+2*radius;
        }else if (mode==MeasureSpec.EXACTLY){
            result =size;
        }
        return result;
    }


    private int getMeasuredWidth(int widthMeasureSpec) {
        int mode = MeasureSpec.getMode(widthMeasureSpec);
        int size = MeasureSpec.getSize(widthMeasureSpec);
        int result=0;
        if (mode==MeasureSpec.AT_MOST){
            result=getPaddingLeft()+getPaddingRight()+2*radius;
        }else if (mode==MeasureSpec.EXACTLY){
            result =size;
        }
        return result;
    }
    //@SuppressLint("DrawAllocation")
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Paint paint = new Paint();
        paint.setColor(Color.RED);
        paint.setAntiAlias(true);
        canvas.drawCircle(radius,radius,radius,paint);

    }
}

2.动画设置

?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <objectAnimator
          android:propertyName="alpha"
        android:valueFrom="0"
        android:valueTo="100dp"
        ></objectAnimator>
</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<objectAnimator
    android:propertyName="rotationX"
    android:valueFrom="0"
    android:valueTo="100dp"
    ></objectAnimator>
</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <objectAnimator
          android:propertyName="scaleX"
        android:valueFrom="0"
        android:valueTo="100dp"
        ></objectAnimator>
</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <objectAnimator
          android:propertyName="translationX"
        android:valueFrom="0"
        android:valueTo="100dp"
        ></objectAnimator>
</set>

写完这四个之后 建立一个动画集 然后把这四个复制到里面  animator_set

3.动画点击页面

package com.example.administrator.zkmn3;

import android.animation.Animator;
import android.animation.AnimatorInflater;
import android.content.Context;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import com.example.administrator.zkmn3.ui.LoginActivity;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private CireleView cv_circle;
    private Button btn_translate;
    private Button btn_scale;
    private Button btn_rotate;
    private Button btn_alpha;
    private Button btn_animator_set;
    private Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        cv_circle = findViewById(R.id.cv_circle);
        btn_translate = findViewById(R.id.btn_translate);
        btn_scale = findViewById(R.id.btn_scale);
        btn_rotate = findViewById(R.id.btn_rotate);
        btn_alpha = findViewById(R.id.btn_alpha);
        btn_animator_set = findViewById(R.id.btn_animator_set);
        context = MainActivity.this;
        btn_translate.setOnClickListener(this);
        btn_scale.setOnClickListener(this);
        btn_rotate.setOnClickListener(this);
        btn_rotate.setOnClickListener(this);
        btn_alpha.setOnClickListener(this);
        btn_animator_set.setOnClickListener(this);
        cv_circle.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.btn_translate:
                bindAnimator(R.animator.translate);
                break;
            case R.id.btn_scale:
                bindAnimator(R.animator.sacle);
                break;
            case R.id.btn_rotate:
                bindAnimator(R.animator.rotela);
                break;
            case R.id.btn_alpha:
                bindAnimator(R.animator.alpha);
                break;
            case R.id.btn_animator_set:
                bindAnimator(R.animator.set_animator);
                break;
            case R.id.cv_circle:
                startActivity(new Intent(this,LoginActivity.class));
                break;

        }
    }

    private void bindAnimator(int animatorId) {
        Animator animator = AnimatorInflater.loadAnimator(context, animatorId);
        animator.setTarget(cv_circle);
        animator.start();
    }
}

4.友盟页面

package com.example.administrator.zkmn3.ui;

import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.example.administrator.zkmn3.R;
import com.example.administrator.zkmn3.ShowActivity;
import com.umeng.socialize.UMAuthListener;
import com.umeng.socialize.UMShareAPI;
import com.umeng.socialize.bean.SHARE_MEDIA;

import java.util.Map;

public class LoginActivity extends AppCompatActivity implements View.OnClickListener {

    private Button btn_login;
    UMAuthListener authListener = new UMAuthListener() {
        /**
         * @desc 授权开始的回调
         * @param platform 平台名称
         */
        @Override
        public void onStart(SHARE_MEDIA platform) {

        }

        /**
         * @desc 授权成功的回调
         * @param platform 平台名称
         * @param action 行为序号,开发者用不上
         * @param data 用户资料返回
         */
        @Override
        public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {


            String uid = data.get("uid");
            String name = data.get("name");
            String gender = data.get("gender");
            String iconurl = data.get("iconurl");
            Toast.makeText(context, "成功了"+uid+"..."+name+"..."+gender+"..."+iconurl, Toast.LENGTH_LONG).show();
            Log.i("context","成功了"+uid+"..."+name+"..."+gender+"..."+iconurl);
        }

        /**
         * @desc 授权失败的回调
         * @param platform 平台名称
         * @param action 行为序号,开发者用不上
         * @param t 错误原因
         */
        @Override
        public void onError(SHARE_MEDIA platform, int action, Throwable t) {

            Toast.makeText(context, "失败:" + t.getMessage(),                                     Toast.LENGTH_LONG).show();
        }

        /**
         * @desc 授权取消的回调
         * @param platform 平台名称
         * @param action 行为序号,开发者用不上
         */
        @Override
        public void onCancel(SHARE_MEDIA platform, int action) {
            Toast.makeText(context, "取消了", Toast.LENGTH_LONG).show();
        }
    };
    private Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        btn_login = findViewById(R.id.btn_login);
        context = LoginActivity.this;
        btn_login.setOnClickListener(this);
        if(Build.VERSION.SDK_INT>=23){
            String[] mPermissionList = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.CALL_PHONE,Manifest.permission.READ_LOGS,Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.SET_DEBUG_APP,Manifest.permission.SYSTEM_ALERT_WINDOW,Manifest.permission.GET_ACCOUNTS,Manifest.permission.WRITE_APN_SETTINGS};
            ActivityCompat.requestPermissions(this,mPermissionList,123);
        }
    }

    @Override
    public void onClick(View v) {
        UMShareAPI.get(this).getPlatformInfo(LoginActivity.this, SHARE_MEDIA.QQ, authListener);

        startActivity(new Intent(this,ShowActivity.class));
    }

    @Override
    public void onRequestPermissionsResult(int requestCode,
                                           String permissions[], int[] grantResults) {
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        UMShareAPI.get(this).onActivityResult(requestCode,resultCode,data);
    }


}

5 App页面

package com.example.administrator.zkmn3.di;

import android.app.Application;

import com.umeng.commonsdk.UMConfigure;
import com.umeng.socialize.PlatformConfig;

public class App extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        UMConfigure.init(this,"\n" +"5b7951a9f43e486f69000406"
                ,"umeng",UMConfigure.DEVICE_TYPE_PHONE,"");//58edcfeb310c93091c000be2 5965ee00734be40b580001a0
        PlatformConfig.setWeixin("wxdc1e388c3822c80b", "3baf1193c85774b3fd9d18447d76cab0");
        //豆瓣RENREN平台目前只能在服务器端配置
        PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad","http://sns.whalecloud.com");
        PlatformConfig.setYixin("yxc0614e80c9304c11b0391514d09f13bf");
        PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
        PlatformConfig.setTwitter("3aIN7fuF685MuZ7jtXkQxalyi", "MK6FEYG63eWcpDFgRYw4w9puJhzDl0tyuqWjZ3M7XJuuG7mMbO");
        PlatformConfig.setAlipay("2015111700822536");
        PlatformConfig.setLaiwang("laiwangd497e70d4", "d497e70d4c3e4efeab1381476bac4c5e");
        PlatformConfig.setPinterest("1439206");
        PlatformConfig.setKakao("e4f60e065048eb031e235c806b31c70f");
        PlatformConfig.setDing("dingoalmlnohc0wggfedpk");
        PlatformConfig.setVKontakte("5764965","5My6SNliAaLxEm3Lyd9J");
        PlatformConfig.setDropbox("oz8v5apet3arcdy","h7p2pjbzkkxt02a");

    }
}

6.展示页面

package com.baway.alex.recyclerview_mutilpart_demo.ui.activity;

import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.widget.Toast;

import com.baway.alex.recyclerview_mutilpart_demo.R;
import com.baway.alex.recyclerview_mutilpart_demo.data.beans.MutilpartBean;
import com.baway.alex.recyclerview_mutilpart_demo.ui.adapter.SubAdapter;
import com.google.gson.Gson;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

public class MainActivity extends AppCompatActivity {

    @BindView(R.id.rv_container)
    RecyclerView rvContainer;
    //数据请求地址
    public static final String URL_STRING = "http://www.xieast.com/api/news/news.php?page=1";
    private Context context;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        context = MainActivity.this;
        //数据请求
        requestData();
    }

    private void requestData() {
        OkHttpClient okHttpClient = new OkHttpClient.Builder().build();
        Request request = new Request.Builder().url(URL_STRING).build();
        //开启请求
        okHttpClient.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                final String errorMsg = e.getMessage().toString();
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Toast.makeText(context, errorMsg, Toast.LENGTH_SHORT).show();
                    }
                });
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                final String responseString = response.body().string();
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Gson gson = new Gson();
                        MutilpartBean mutilpartBean = gson.fromJson(responseString, MutilpartBean.class);
                        List<MutilpartBean.DataBean> beanList = mutilpartBean.getData();
                        //布局管理器
                        LinearLayoutManager manager = new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false);
                        rvContainer.setLayoutManager(manager);
                        //创建适配器,传入所需内容
                        SubAdapter subAdapter = new SubAdapter(context, (ArrayList<MutilpartBean.DataBean>) beanList);
                        rvContainer.setAdapter(subAdapter);
                    }
                });
            }
        });
    }
}


7.适配器

package com.baway.alex.recyclerview_mutilpart_demo.ui.adapter;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import com.baway.alex.recyclerview_mutilpart_demo.R;
import com.baway.alex.recyclerview_mutilpart_demo.data.beans.MutilpartBean;
import com.squareup.picasso.Picasso;

import java.util.ArrayList;
import java.util.List;

//设置RecyclerView.ViewHolder作为泛型内容,使得ReccyclerView可以设置多种条目布局
public class SubAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    Context context;
    ArrayList<MutilpartBean.DataBean> beanList;

    public SubAdapter(Context context, ArrayList<MutilpartBean.DataBean> beanList) {
        this.context = context;
        this.beanList = beanList;
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int position) {
        //根据解析数据,明确是具体哪种填充视图
        View rootView;
        RecyclerView.ViewHolder holder;
        if (beanList.get(position).getThumbnail_pic_s03() == null && beanList.get(position).getThumbnail_pic_s02() == null) {
            //第一种填充的视图布局
            rootView = LayoutInflater.from(context).inflate(R.layout.onepic_layout, viewGroup, false);
            holder = new OnePicHolder(rootView);
        } else if (beanList.get(position).getThumbnail_pic_s03() == null && beanList.get(position).getThumbnail_pic_s02() != null) {
            //第二种填充的视图布局
            rootView = LayoutInflater.from(context).inflate(R.layout.twopic_layout, viewGroup, false);
            holder = new TwoPicHolder(rootView);
        } else {
            //第三种填充的视图布局
            rootView = LayoutInflater.from(context).inflate(R.layout.threepic_layout, viewGroup, false);
            holder = new ThreePicHolder(rootView);
        }
        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
        //具体绑定哪个ViewHolder对象
        if (viewHolder instanceof OnePicHolder) {
            //通过Picasso加载解析图片
            Picasso.get().load(beanList.get(position).getThumbnail_pic_s()).into(((OnePicHolder) viewHolder).iv_firstItem);
        } else if (viewHolder instanceof TwoPicHolder) {
            Picasso.get().load(beanList.get(position).getThumbnail_pic_s()).into(((TwoPicHolder) viewHolder).iv_twoPic_firstItem);
            Picasso.get().load(beanList.get(position).getThumbnail_pic_s02()).into(((TwoPicHolder) viewHolder).iv_twoPic_bottomItem);
        } else {
            Picasso.get().load(beanList.get(position).getThumbnail_pic_s()).into(((ThreePicHolder) viewHolder).iv_threePic_firstItem);
            Picasso.get().load(beanList.get(position).getThumbnail_pic_s02()).into(((ThreePicHolder) viewHolder).iv_threePic_middleItem);
            Picasso.get().load(beanList.get(position).getThumbnail_pic_s03()).into(((ThreePicHolder) viewHolder).iv_threePic_bottomItem);
        }
    }

    @Override
    public int getItemCount() {
        return beanList.size();
    }

    class OnePicHolder extends RecyclerView.ViewHolder {
        private ImageView iv_firstItem;

        public OnePicHolder(@NonNull View itemView) {
            super(itemView);
            iv_firstItem = itemView.findViewById(R.id.iv_firstItem);
        }
    }

    class TwoPicHolder extends RecyclerView.ViewHolder {

        private ImageView iv_twoPic_firstItem;
        private ImageView iv_twoPic_bottomItem;

        public TwoPicHolder(@NonNull View itemView) {
            super(itemView);
            iv_twoPic_firstItem = itemView.findViewById(R.id.iv_twoPic_firstItem);
            iv_twoPic_bottomItem = itemView.findViewById(R.id.iv_twoPic_bottomItem);
        }
    }

    class ThreePicHolder extends RecyclerView.ViewHolder {
        private ImageView iv_threePic_firstItem;
        private ImageView iv_threePic_middleItem;
        private ImageView iv_threePic_bottomItem;

        public ThreePicHolder(@NonNull View itemView) {
            super(itemView);
            iv_threePic_firstItem = itemView.findViewById(R.id.iv_threePic_firstItem);
            iv_threePic_middleItem = itemView.findViewById(R.id.iv_threePic_middleItem);
            iv_threePic_bottomItem = itemView.findViewById(R.id.iv_threePic_bottomItem);

        }
    }
}

最后依赖

implementation 'com.android.support:design:27.+'
implementation 'com.squareup.okhttp3:okhttp:3.11.0'
implementation 'com.google.code.gson:gson:2.2.4'
implementation 'com.jakewharton:butterknife:8.8.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
implementation 'com.squareup.picasso:picasso:2.71828'
implementation files('libs/umeng-common-1.5.3.jar')
implementation files('libs/umeng-share-core-6.9.3.jar')
implementation files('libs/umeng-sharetool-6.9.3.jar')
implementation files('libs/umeng-share-QQ-simplify-6.9.3.jar')
implementation files('libs/umeng-shareboard-widget-6.9.3.jar')

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值