Android 高级编程【6个实战案例(附源码):刮刮卡、补间动画、逐帧动画、Fragment、RecyclerView、下拉刷新】

目   录

刮刮卡案例【ScratchCard】

结构图

activity_main.xml

MainActivity.java

运行效果图

补间动画(Tween Animation)

逐帧动画(Frame Animation)

Fragment

RecyclerView 控件

导入recyclerView控件包

实战演练

activity_main.xml

ltem_home.xml

MainActivity.java

下拉刷新

activity_main.xml

MainActivity.java


刮刮卡案例【ScratchCard】

源码【可用Gitee直接拷贝】:https://gitee.com/lwx001/ScratchCard

结构图

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=".MainActivity">

    <ImageView
        android:id="@+id/bg"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/bg" />

    <ImageView
        android:id="@+id/imgv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop"
        android:src="@drawable/scratch_card" />
</RelativeLayout>

MainActivity.java

package cn.lwx.scratchcard;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;

import android.util.DisplayMetrics;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;

public class MainActivity extends AppCompatActivity {
    private ImageView imageView;
    private Bitmap alterbitmap;
    private double nX, nY;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = (ImageView) findViewById(R.id.imgv);
        //从资源文件中解析一张bitmap
        Bitmap bitmap =
                BitmapFactory.decodeResource(getResources(),
                        R.drawable.scratch_card);
        alterbitmap = Bitmap.createBitmap(bitmap.getWidth(),
                bitmap.getHeight(), bitmap.getConfig());
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        nX = (double) bitmap.getWidth() / dm.widthPixels;
        nY = (double) bitmap.getHeight() / dm.heightPixels;
        //创建一个canvas对象
        Canvas canvas = new Canvas(alterbitmap);
        //创建画笔对象
        Paint paint = new Paint();
        //为画笔设置颜色
        paint.setColor(Color.BLACK);
        paint.setAntiAlias(true);
        //创建Matrix对象
        Matrix matrix = new Matrix();
        //在alterBitmap上画图
        canvas.drawBitmap(bitmap, matrix, paint);
        //为ImageView设置触摸监听
        imageView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                try {
                    int x = (int) event.getX();
                    int y = (int) event.getY();
                    for (int i = -100; i < 100; i++) {
                        for (int j = -100; j < 100; j++) {
                            //将区域类的像素点设为透明像素
                            if (Math.sqrt((i * i) + (j * j)) <= 100) {
                                alterbitmap.setPixel((int) (x * nX) + i,
                                        (int) (y * nY + 90) + j, Color.TRANSPARENT);
                            }
                        }
                    }
                    imageView.setImageBitmap(alterbitmap);

                } catch (Exception e) {
                    //加try{}catch(){}放置用户触摸图片以外的地方而异常退出
                    e.printStackTrace();
                }
                //销毁掉该触摸事件
                return true;
            }
        });
    }
}

运行效果图

补间动画(Tween Animation

源码【可用Gitee直接拷贝】:https://gitee.com/lwx001/Tween 

逐帧动画(Frame Animation

源码:https://gitee.com/lwx001/Frame

 

Fragment

推荐学习网址:菜鸟教程

https://www.runoob.com/w3cnote/android-tutorial-fragment-base.html

ViewPager的简单使用

https://www.runoob.com/w3cnote/android-tutorial-viewpager.html

代码 : https://gitee.com/lwx001/ShowFragment

RecyclerView 控件

导入recyclerView控件包

实战演练

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=".MainActivity">
    <!--android.support.v7.widget.RecyclerView-->
    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/id_recyclerview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></androidx.recyclerview.widget.RecyclerView>
</RelativeLayout>

ltem_home.xml

<?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="wrap_content">

    <ImageView
        android:id="@+id/iv_num"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/iv1" />

    <TextView
        android:id="@+id/id_num"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:text="1" />
</LinearLayout>

MainActivity.java

package cn.lwx.recyclerviewshow;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.os.Bundle;

//import android.support.v7.app.AppCompatActivity;
//import android.os.Bundle;
//import android.support.v7.widget.LinearLayoutManager;
//import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

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

public class MainActivity extends AppCompatActivity {
    private RecyclerView mRecyclerView;
    private List<Integer> mDatas;
    private HomeAdapter mAdapter;
    private int[] img;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initData();
        mRecyclerView = (RecyclerView) findViewById(R.id.id_recyclerview);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        mRecyclerView.setAdapter(mAdapter = new HomeAdapter());
    }

    protected void initData() {
        mDatas = new ArrayList<Integer>();
        for (int i = 1; i < 11; i++) {
            mDatas.add(i);
        }
        img = new int[]{
                R.drawable.iv1, R.drawable.iv2,
                R.drawable.iv3, R.drawable.iv4, R.drawable.iv5,
                R.drawable.iv6, R.drawable.iv7, R.drawable.iv8,
                R.drawable.iv9, R.drawable.iv10
        };
    }

    class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder> {
        @Override
        public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
            MyViewHolder holder = new MyViewHolder(LayoutInflater.from(
                    MainActivity.this).inflate(R.layout.item_home, parent,
                    false));
            return holder;
        }

        @Override
        public void onBindViewHolder(MyViewHolder holder, int position) {
            holder.tv.setText("这是第" + mDatas.get(position).toString() + "个精灵");
            holder.iv.setImageResource(img[position]);
        }

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

        class MyViewHolder extends RecyclerView.ViewHolder {
            TextView tv;
            ImageView iv;

            public MyViewHolder(View view) {
                super(view);
                tv = (TextView) view.findViewById(R.id.id_num);
                iv = (ImageView) view.findViewById(R.id.iv_num);
            }
        }
    }
}

 

下拉刷新

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=".MainActivity">
    <!--android.support.v4.widget.SwipeRefreshLayout-->
    <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
        android:id="@+id/swipe_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/textView1"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="70dp"
                android:gravity="center"
                android:text="下拉刷新"
                android:textSize="20sp" />
        </ScrollView>
    </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</RelativeLayout>

MainActivity.java

package cn.lwx.swiperefresh;

import androidx.appcompat.app.AppCompatActivity;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;

import android.os.Bundle;

import android.os.Handler;
//import android.support.v4.widget.SwipeRefreshLayout;
//import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private TextView tv;
    private SwipeRefreshLayout swipeRefreshLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv = (TextView) findViewById(R.id.textView1);
        swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_container);
        swipeRefreshLayout.setColorSchemeResources(
                android.R.color.holo_red_light,
                android.R.color.holo_green_light,
                android.R.color.holo_blue_light);
        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                tv.setText("正在刷新");
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        // TODO Auto-generated method stub
                        tv.setText("刷新完成");
                        swipeRefreshLayout.setRefreshing(false);
                    }
                }, 3000);
            }
        });
    }
}

 

猜你喜欢

转载自blog.csdn.net/weixin_44949135/article/details/106037837