Android App常用UI细节
一、文本
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="升级指南"
android:textSize="@dimen/sp_16"
android:gravity="center_vertical"
android:textColor="@color/col_333333"
android:textStyle="bold"
android:drawablePadding="@dimen/d_8"
android:layout_marginLeft="@dimen/d_25"
android:drawableLeft="@drawable/bg_ebc387_radius_2"
/>
2、自定义曲线
z
3、自定义动画:
private void setAnim(Canvas canvas) {
PathMeasure measure =new PathMeasure(mPath, false);
float pathLength = measure.getLength();
PathEffect effect =new DashPathEffect(new float[]{pathLength,
pathLength}, pathLength - pathLength *mProgress);
mPaintLine.setPathEffect(effect);
canvas.drawPath(mPath, mPaintLine);
}
4、圆形拐角效果
paint.setPathEffect(newCornerPathEffect(5));
5、虚线效果
paint.setPathEffect(newDashPathEffect(newfloat[]{30,10,20,10},10));
mPaintShader.setColor(Color.GRAY);mPaintShader.setStrokeWidth(3f);mPaintShader.setStyle(Paint.Style.STROKE);mPathEffect.moveTo(300,400);mPathEffect.lineTo(1200,400);mPaintShader.setPathEffect(new DashPathEffect(new float[]{4, 4}, 0));canvas.drawPath(mPathEffect, mPaintShader);
6、组合
https://www.cnblogs.com/xqxacm/p/6669596.html//虚线路径DashPathEffect dashPathEffect = new DashPathEffect(new float[]{30, 10, 20, 10}, 0);//圆角拐点路径CornerPathEffect cornerPathEffect = new CornerPathEffect(10);//合并后的路径ComposePathEffect composePathEffect = newComposePathEffect(dashPathEffect, cornerPathEffect);//设置路径paint.setPathEffect(composePathEffect);
7、点+文本
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="提醒用户评价"
android:textSize="@dimen/sp_13"
android:textColor="@color/col_333333"
android:layout_marginLeft="@dimen/d_25"
android:paddingTop="@dimen/d_6"
android:paddingLeft="@dimen/d_20"
android:drawableLeft="@drawable/bg_ebc387_circle"
android:drawablePadding="@dimen/d_5"
/>
8、boder圆角边框
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="@dimen/d_8" />
<solid android:color="@color/white" />
<stroke android:color="@color/cor_DDB16C" android:width="@dimen/d_1"/>
</shape>
9、View动画:DiscoverTopicNew DiscoverTopicNew
private void setupTransition(ViewGroup viewGroup){
final LayoutTransition transition = new LayoutTransition();
viewGroup.setLayoutTransition(transition);
transition.setAnimator(LayoutTransition.APPEARING, transition.getAnimator(LayoutTransition.APPEARING));
transition.setAnimator(LayoutTransition.DISAPPEARING, transition.getAnimator(LayoutTransition.DISAPPEARING));
transition.setAnimator(LayoutTransition.CHANGE_APPEARING, transition.getAnimator(LayoutTransition.CHANGE_APPEARING));
transition.setAnimator(LayoutTransition.CHANGE_DISAPPEARING, transition.getAnimator(LayoutTransition.CHANGE_DISAPPEARING));
}
public void gotoPreviousAnimator() {
BaseFragment fragment = getThemes(false);
if (fragment == null) {
return;
}
topic_container.removeAllViews();
LayoutTransition mLayoutTransition = new LayoutTransition();
ObjectAnimator animator =
ObjectAnimator.ofFloat(null, "translationY", -ScreenUtils.getDisplayHeight() / 2f,
0f);
mLayoutTransition.setDuration(LayoutTransition.APPEARING, 200);
mLayoutTransition.setAnimator(LayoutTransition.APPEARING, animator);
topic_container.setLayoutTransition(mLayoutTransition);
topic_container.addView(mRootViewLay);
TopicFragmentAdapter adapter = new TopicFragmentAdapter(this);
adapter.setFragments(fragment);
viewPager2.setAdapter(adapter);
statisticBuilder.setFromAction("punch_sign_topic_page:switching_topic")
.setFrom_action_ext("button_type", "2");
SoyoungStatistic.getInstance().postStatistic(statisticBuilder.build());
}
public void gotoNextAnimator() {
BaseFragment fragment = getThemes(true);
if (fragment == null) {
return;
}
topic_container.removeAllViews();
LayoutTransition mLayoutTransition = new LayoutTransition();
ObjectAnimator animator = ObjectAnimator.ofFloat(null, "translationY",
+(ScreenUtils.getDisplayHeight() / 2) + 90, 0f);
mLayoutTransition.setDuration(LayoutTransition.APPEARING, 200);
mLayoutTransition.setAnimator(LayoutTransition.APPEARING, animator);
topic_container.setLayoutTransition(mLayoutTransition);
topic_container.addView(mRootViewLay);
TopicFragmentAdapter adapter = new TopicFragmentAdapter(this);
adapter.setFragments(fragment);
viewPager2.setAdapter(adapter);
statisticBuilder.setFromAction("punch_sign_topic_page:switching_topic")
.setFrom_action_ext("button_type", "1");
SoyoungStatistic.getInstance().postStatistic(statisticBuilder.build());
}
10、Canvas 填充
/**
* 是否填充
* @param color
* @param isFill
*/
public void setParame(int color,boolean isFill) {
this.mCenterTextColor = color;
pointPaint.setStyle(isFill? Paint.Style.FILL:Paint.Style.STROKE);
invalidate();
}
11、渐变
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
android:angle="90"
android:endColor="#2A8EE3"
android:startColor="#00000000" />
</shape>
12、代码动态添加View
for (int i = 0; i < 9; i++) { TextView textView = new TextView(mActivity);
ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 500); textView.setText("" + i);
textView.setTextSize(50);
textView.setGravity(Gravity.CENTER); textView.setLayoutParams(layoutParams);
mRecyclerView.addView(textView);}