目   录

刮刮卡案例【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"><ImageViewandroid:id="@+id/bg"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/bg" /><ImageViewandroid: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;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);imageView = (ImageView) findViewById(R.id.imgv);//从资源文件中解析一张bitmapBitmap 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() {@Overridepublic 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.RecyclerViewandroid: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"><ImageViewandroid:id="@+id/iv_num"android:layout_width="wrap_content"android:layout_height="wrap_content"android:background="@drawable/iv1" /><TextViewandroid: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;@Overrideprotected 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> {@Overridepublic MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {MyViewHolder holder = new MyViewHolder(LayoutInflater.from(MainActivity.this).inflate(R.layout.item_home, parent,false));return holder;}@Overridepublic void onBindViewHolder(MyViewHolder holder, int position) {holder.tv.setText("这是第" + mDatas.get(position).toString() + "个精灵");holder.iv.setImageResource(img[position]);}@Overridepublic 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.SwipeRefreshLayoutandroid:id="@+id/swipe_container"android:layout_width="match_parent"android:layout_height="match_parent"><ScrollViewandroid:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid: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;@Overrideprotected 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() {@Overridepublic void onRefresh() {tv.setText("正在刷新");new Handler().postDelayed(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubtv.setText("刷新完成");swipeRefreshLayout.setRefreshing(false);}}, 3000);}});}
}

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

  1. 毕业设计-基于SSM框架大学教务管理平台项目开发实战教程(附源码)

    文章目录 1.项目简介 2.项目收获 3.项目技术栈 4.测试账号 5.项目部分截图 6.常见问题 毕业设计-基于SSM框架大学教务管理平台项目实战教程-附源码 课程源码下载地址:https://do ...

  2. 无人驾驶--实时定位与地图构建(SLAM)仿真与实战(附源码)

    无人驾驶–实时定位与地图构建(SLAM)仿真与实战(附源码) 一个SLAM的技术小结,供自己回顾也为后人学习提供参考. 另外建了一个无人驾驶方面的微信交流群,有兴趣的同行或者专家学者可以加我微信:wx ...

  3. Android动画——逐帧动画

    1.概述 Android 平台有一套完整的动画框架,在Android3.0之前有两种动画,一种方式是补间动画 Tween Animation.另一种叫逐帧动画 Frame Animation(也称Dr ...

  4. Android Studio App开发中使用录音机、MediaRecorder录制音频和MediaPlayer播放音频讲解及实战(附源码)

    运行有问题或需要源码请点赞关注收藏后评论区留言~~~ 一.使用录音机录制音频 手机有自带的系统相机,也有自带的系统录音机,只要在调用startActivityForResult之前指定该动作,就会自动 ...

  5. 【Android App】勾勒出三维立方体和球体以及它们的转动图形讲解及实战(附源码和演示视频 超详细)

    需要源码或运行有问题请点赞关注收藏后评论区留言~~~ 一.轮廓勾勒 勾勒三维物体轮廓线条的步骤如下: (1)调用glEnableClientState方法启用顶点开关 (2)调用glVertexPoi ...

  6. 【Android App】给三维的地球仪贴上动物贴纸实战(附源码和演示 超详细必看)

    需要源码和图片集请点赞关注收藏后评论区留言~~~ 一.纹理贴图 给三维物体穿衣服的动作,通常叫做给三维图形贴图,更专业地说叫纹理渲染. 渲染纹理的过程主要由三大项操作组成,分别说明如下: (1)启用纹 ...

  7. Android App开发动画特效中帧动画和电影淡入淡出动画的讲解及实战(附源码和演示视频 简单易懂)

    需要图片集和源码请点赞关注收藏后评论区留言~~~ 一.帧动画 Android的动画分为三类,帧动画,补间动画和属性动画.其中帧动画是实现原理最简单的一种,跟现实生活中的电影胶卷类似,都是在短时间内连续 ...

  8. 【Android App】利用自带的人脸检测器和OpenCV检测人脸讲解及实战(附源码和演示 超详细)

    需要源码请点赞关注收藏后评论区留言私信~~~~ 一.利用人脸检测器识别人脸 对于简单的人脸识别操作,Android已经提供了专门的识别工具,名叫人脸检测器FaceDetector,部分常用方法如下 F ...

  9. 【Android App】二维码的讲解及生成属于自己的二维码实战(附源码和演示 超详细必看)

    需要全部代码请点赞关注收藏后评论区留言~~~ 一.二维码基本内容介绍 条形码只能表达十几位数字编码,无法表示更复杂的数据. 二维码在二维方格上描出一个个黑点,从而表达更丰富的信息. 二维码早已在手机A ...

最新文章

  1. 深度学习框架:GPU
  2. UI组件之TextView及其子类(二)RadioButton和CheckBox
  3. Python教程:import 、from import 及from import *
  4. 接口测试到底是什么?如何制造接口数据
  5. unet作为服务器不显示画面,UNet:无法生成服务器对象(不使用NetworkManager)
  6. SageMath安装及使用
  7. unix 系统已经消亡了吗_世界上一半的语言正在消亡。 我们应该保存它们吗?
  8. 背景图片-密度屏幕(移动端)
  9. 计算机信息检索技术实质上是逻辑运算,在信息检索的实际过程中,如需要扩大检索范围时,如何调整检索策略...
  10. 华理计算机专硕奖学金,华东理工大学研究生课程学习奖学金评定方法(试行)
  11. android textview表情,android如何在textview或edittext上添加表情
  12. 模仿美团跑腿做的跑腿小程序
  13. 三极管、场效应管和MOS管三者的工作原理
  14. MxN螺旋矩阵(由外向内)
  15. 存储管理——内存扩充技术
  16. 复测前端BUG一定要清缓存吗?
  17. 耦合式是什么意思_什么是耦合、解耦
  18. qiankun 传统项目配置_前端微服务
  19. 【智能制造】全球人工智能与制造业融合的现状及思考
  20. paint 3d_如何使用Microsoft Paint 3D

热门文章

  1. mysql online ddl和pt_online ddl与pt-osc详解
  2. php txt删除重复行,php – 删除文本文件中的重复行
  3. matlab 里的mod,matlab中mod()函数究竟有什么用?具体的作用(不要告诉我怎么算,我只想知道他有什么用)...
  4. 为什么有时打不开爬取到的图片
  5. 调参,注意神经网络处于哪种相态
  6. 基于结构化数据的文本生成:非严格对齐生成任务及动态轻量的GCN生成模型
  7. 布朗大学和FAIR开源LA-MCTS,及其在神经网络结构搜索的应用
  8. Seq2Seq之双向解码机制 | 附开源实现
  9. 每周一起读 × 招募 | ACL 2019:基于知识增强的语言表示模型
  10. 手把手带你复现ICCV 2017经典论文—PyraNet