1.开发自定义的View
<!--XML文件-->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
android:background="@mipmap/img11"
android:id="@+id/grass"
tools:context=".RabbitActivity">
</FrameLayout>
<!--Activity文件-->
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.FrameLayout;
public class RabbitActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rabbit);
FrameLayout frameLayout=(FrameLayout)findViewById(R.id.grass);
final RabbitView rabbit=new RabbitView(this);
rabbit.setOnTouchListener(new View.OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
rabbit.bitmapX= event.getX();
rabbit.bitmapY=event.getY();
rabbit.invalidate();
return true;
}
});
frameLayout.addView(rabbit);
}
}
<!--View文件-->
public class RabbitView extends View {
public float bitmapX;
public float bitmapY;
public RabbitView(Context context) {
super(context);
bitmapX=290;
bitmapY=130;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint=new Paint();
Bitmap bitmap= BitmapFactory.decodeResource(this.getResources(),R.mipmap.xing1);
canvas.drawBitmap(bitmap,bitmapX,bitmapY,paint);
if(bitmap.isRecycled()){
bitmap.recycle();
}
}
}

2.ANR产生时, 系统会生成一个跟踪日志文件,文件是data/anr/traces.txt
3.RatingBar中的相关属性:
属性 | 说明 |
---|
android:rating | 这一条是设置默认的分数,可以是浮点数,RatingBar其实是评分条,所以星星的数量其实就是用来显示分数的数量,而默认的分数就是应用一开始出现的星星的数量。 | android:numStars | 整数,这个是设置显示的星星数量 | android:stepSize | 步长,分数增加时,是按照多大的分数增加的 |
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="50sp"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:text="满意度:"
android:textColor="@color/black"
android:textSize="20sp"/>
<RatingBar
android:layout_height="70sp"
android:layout_width="240sp"
android:theme="@style/RatingBar"
android:rating="2"
android:layout_marginTop="10sp"
android:numStars="5"
android:stepSize="1"
/>
</LinearLayout>
**style文件**
<!--RatingBar颜色-->
<style name="RatingBar" parent="Theme.AppCompat">
<item name="colorControlNormal">#BABABA</item>
<item name="colorControlActivated">#E3AFC4</item>
</style>>

4.两个Activity跳转,一定会执行哪些方法:
第一个Activity会执行OnPause方法;第二个Activity会执行onStart方法,OnResume方法
5.布局管理器
(1)网格布局管理器和表格布局管理器的区别 ①表格布局管理器可以跨列,而网格布局管理器可跨行、跨列 ②表格布局管理器内容超出容器的组件,将不会显示;而网格布局管理器将会换行 (2)网格布局管理器属性
属性 | 属性值 |
---|
android:columnCount | 指定最大列数 | android:rowCount | 指定最大行数 | android:orientation | 组件的排列方式 |
(3)布局管理器的嵌套规则 ①根布局必须包含xmlns属性 ②在一个布局文件中,最多只能有一个根布局管理器,如果需要有多个还需要使用一个根布局管理器将他们括起来 ③不能嵌入太深,如果嵌入太深,会影响性能
6.textview跑马灯实现
属性 | 说明 |
---|
singleLine | 内容单行显示 | focusable | 是否可以获取焦点 | focusableInTouchMode | 用于控制视图在触摸状态下是否可以聚焦 | ellipsize | 在哪里省略文本 | marqueeRepeatLimit | 字幕动画重复次数,android:marqueeRepeatLimit=“marquee_forever” 控制组件在跑马灯轮播时是无限循环的 | scrollHorizontally | 控制可以水平滑动 |
①xml文件
<TextView
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center_vertical"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
android:text="@string/name"
android:textColor="@color/white"
android:textSize="50dp"
/>
②java代码
TextView tv = findViewById(R.id.tv);
tv.requestFocus();
③展示
|