当前位置: 首页 > wzjs >正文

长沙臻钬建站活动方案阿里云做网站教程

长沙臻钬建站活动方案,阿里云做网站教程,内网网站如何建设方案,网站内容建设ppt场景一:自定义进度条 在很多应用中,我们会看到一些独特样式的进度条,接下来就实现一个简单的圆形进度条。 实现思路 继承 View 类。重写 onDraw 方法,在该方法里使用 Canvas 和 Paint 来绘制圆形进度条。提供更新进度的方法。 …

 场景一:自定义进度条

在很多应用中,我们会看到一些独特样式的进度条,接下来就实现一个简单的圆形进度条。

实现思路
  • 继承 View 类。
  • 重写 onDraw 方法,在该方法里使用 Canvas 和 Paint 来绘制圆形进度条。
  • 提供更新进度的方法。
示例代码
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.View;public class CustomProgressBar extends View {private Paint backgroundPaint;private Paint progressPaint;private int progress = 0;private RectF rectF;public CustomProgressBar(Context context) {super(context);init();}public CustomProgressBar(Context context, AttributeSet attrs) {super(context, attrs);init();}public CustomProgressBar(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init();}private void init() {backgroundPaint = new Paint();backgroundPaint.setColor(Color.GRAY);backgroundPaint.setStyle(Paint.Style.STROKE);backgroundPaint.setStrokeWidth(20);backgroundPaint.setAntiAlias(true);progressPaint = new Paint();progressPaint.setColor(Color.BLUE);progressPaint.setStyle(Paint.Style.STROKE);progressPaint.setStrokeWidth(20);progressPaint.setAntiAlias(true);rectF = new RectF();}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);int centerX = getWidth() / 2;int centerY = getHeight() / 2;int radius = Math.min(centerX, centerY) - 20;rectF.set(centerX - radius, centerY - radius, centerX + radius, centerY + radius);// 绘制背景圆形canvas.drawArc(rectF, 0, 360, false, backgroundPaint);// 绘制进度弧形float sweepAngle = (progress / 100.0f) * 360;canvas.drawArc(rectF, -90, sweepAngle, false, progressPaint);}public void setProgress(int progress) {if (progress < 0) {progress = 0;} else if (progress > 100) {progress = 100;}this.progress = progress;invalidate();}
}    

在布局文件中使用

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:gravity="center"><com.example.customview.CustomProgressBarandroid:id="@+id/customProgressBar"android:layout_width="200dp"android:layout_height="200dp" />
</LinearLayout>

在 Activity 中更新进度 

import android.os.Bundle;
import android.os.Handler;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {private CustomProgressBar customProgressBar;private int currentProgress = 0;private Handler handler = new Handler();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);customProgressBar = findViewById(R.id.customProgressBar);// 模拟进度更新new Thread(() -> {while (currentProgress < 100) {currentProgress++;handler.post(() -> customProgressBar.setProgress(currentProgress));try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}}handler.post(() -> Toast.makeText(MainActivity.this, "进度完成", Toast.LENGTH_SHORT).show());}).start();}
}

场景二:自定义星级评分控件

在电商、社交等应用里,星级评分控件是很常见的。下面来实现一个简单的星级评分控件。

实现思路
  • 继承 View 类。
  • 重写 onDraw 方法,绘制星星图标。
  • 重写 onTouchEvent 方法,处理触摸事件,实现星级选择。
示例代码

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;import androidx.core.content.ContextCompat;public class CustomStarRating extends View {private Drawable starFilled;private Drawable starEmpty;private int starCount = 5;private int rating = 0;private int starSize = 50;private int starSpacing = 10;public CustomStarRating(Context context) {super(context);init();}public CustomStarRating(Context context, AttributeSet attrs) {super(context, attrs);init();}public CustomStarRating(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init();}private void init() {starFilled = ContextCompat.getDrawable(getContext(), android.R.drawable.star_big_on);starEmpty = ContextCompat.getDrawable(getContext(), android.R.drawable.star_big_off);}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);for (int i = 0; i < starCount; i++) {int left = i * (starSize + starSpacing);int top = 0;int right = left + starSize;int bottom = top + starSize;Drawable drawable = (i < rating) ? starFilled : starEmpty;drawable.setBounds(left, top, right, bottom);drawable.draw(canvas);}}@Overridepublic boolean onTouchEvent(MotionEvent event) {if (event.getAction() == MotionEvent.ACTION_DOWN) {float x = event.getX();int newRating = (int) (x / (starSize + starSpacing)) + 1;if (newRating > starCount) {newRating = starCount;} else if (newRating < 0) {newRating = 0;}rating = newRating;invalidate();return true;}return super.onTouchEvent(event);}public int getRating() {return rating;}public void setRating(int rating) {if (rating < 0) {rating = 0;} else if (rating > starCount) {rating = starCount;}this.rating = rating;invalidate();}
}    

在布局文件中使用 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:gravity="center"><com.example.customview.CustomStarRatingandroid:id="@+id/customStarRating"android:layout_width="wrap_content"android:layout_height="wrap_content" />
</LinearLayout>

在 Activity 中获取评分 

import android.os.Bundle;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {private CustomStarRating customStarRating;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);customStarRating = findViewById(R.id.customStarRating);// 设置初始评分customStarRating.setRating(3);// 获取评分int rating = customStarRating.getRating();Toast.makeText(this, "当前评分:" + rating, Toast.LENGTH_SHORT).show();}
}

场景三:实现一个自定义的圆角ImageView

实现思路
  1. 继承 ImageView:创建一个新的类,继承自 ImageView
  2. 重写 onDraw 方法:在 onDraw 方法里,运用 Canvas 和 Paint 来绘制圆角矩形,并且把图片绘制到这个圆角矩形内。
  3. 处理图片缩放:要保证图片能够正确地缩放以适应圆角矩形。
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.RectF;
import android.util.AttributeSet;
import androidx.appcompat.widget.AppCompatImageView;public class RoundedImageView extends AppCompatImageView {private float cornerRadius = 20; // 默认圆角半径public RoundedImageView(Context context) {super(context);}public RoundedImageView(Context context, AttributeSet attrs) {super(context, attrs);init(context, attrs);}public RoundedImageView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init(context, attrs);}private void init(Context context, AttributeSet attrs) {// 可以在这里从属性中获取圆角半径// TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.RoundedImageView);// cornerRadius = a.getDimension(R.styleable.RoundedImageView_cornerRadius, cornerRadius);// a.recycle();}@Overrideprotected void onDraw(Canvas canvas) {int width = getWidth();int height = getHeight();// 创建一个圆角矩形路径Path path = new Path();RectF rect = new RectF(0, 0, width, height);path.addRoundRect(rect, cornerRadius, cornerRadius, Path.Direction.CW);canvas.clipPath(path);super.onDraw(canvas);}public void setCornerRadius(float radius) {this.cornerRadius = radius;invalidate();}
}    

使用方法

在布局文件中使用自定义的 RoundedImageView

<com.example.yourpackage.RoundedImageViewandroid:layout_width="200dp"android:layout_height="200dp"android:src="@drawable/your_image" />    

代码解释

  1. RoundedImageView 类:继承自 AppCompatImageView,它是 ImageView 的兼容版本。
  2. cornerRadius 变量:用来存储圆角的半径,默认值为 20。
  3. init 方法:能够从属性中获取圆角半径,不过当前处于注释状态。
  4. onDraw 方法
    • 创建一个圆角矩形路径。
    • 运用 canvas.clipPath 方法把画布裁剪成圆角矩形。
    • 调用 super.onDraw(canvas) 来绘制图片。
  5. setCornerRadius 方法:用于动态设置圆角半径,并且调用 invalidate 方法重新绘制视图。

之后还会有补充的,感谢观看!!!


文章转载自:

http://xq89Rxsi.tpchy.cn
http://EG5msOMV.tpchy.cn
http://nUyRO128.tpchy.cn
http://iLLmqgDi.tpchy.cn
http://HgMdJuQM.tpchy.cn
http://L6G9BEWH.tpchy.cn
http://mVmp70ny.tpchy.cn
http://ejjG7X7D.tpchy.cn
http://BrGhydpV.tpchy.cn
http://kvFFhy8O.tpchy.cn
http://cRsLOHNB.tpchy.cn
http://0QTLkcjN.tpchy.cn
http://a0kX4Crd.tpchy.cn
http://L7CYaqnA.tpchy.cn
http://gOObVAny.tpchy.cn
http://6pEBvTJu.tpchy.cn
http://9EwwEdIK.tpchy.cn
http://SCZS3CVN.tpchy.cn
http://UCgMeaVd.tpchy.cn
http://0OGg6Mr7.tpchy.cn
http://9mQBjg62.tpchy.cn
http://xH4FHsQH.tpchy.cn
http://Cni0RpgT.tpchy.cn
http://yKxHcv6Q.tpchy.cn
http://rl7sP3PI.tpchy.cn
http://7iHi7HrR.tpchy.cn
http://F0S0u4p4.tpchy.cn
http://cDCe3lAk.tpchy.cn
http://UgyC8z2D.tpchy.cn
http://5Zp4dvXe.tpchy.cn
http://www.dtcms.com/wzjs/729716.html

相关文章:

  • 暖色调 网站做电影网站不放国内主机
  • 延吉市建设局网站给女友做的网站 源码
  • 公司网站毕业设计论文dedecms网站地图模板怎么
  • 山西山西省建设厅网站建设银行反钓鱼网站
  • 长沙哪里有做网站的公司安徽建设厅网站首页
  • 海南房产网站建设wordpress xampp 教程
  • 做网站包域名包服务器多少钱手机怎么自己做网页
  • 票务网站策划书怎么给网站做广告
  • 网络科技有限公司网站建设策划书苏州高新区网站建设
  • 金华公司做网站wordpress签到用户中心插件
  • 济南正规网站制作品牌网站建设论文 优帮云
  • 常用的网站有哪些上海网站制作是什么
  • 石家庄手机网站建设公司小程序设计用什么软件
  • 建设六马路小学官方网站企业网是什么类型
  • 网站服务器自己搭建网站网站服务器
  • 整个网站全是图片做的wordpress主题是用什么开发出来的
  • 网站建设主题怎么定德州网络推广
  • 个人网站备案地址选择wordpress 批量 发布
  • 做网站泉州超炫网站页面
  • 高网站建设樟木头网站推广
  • 做网站的技术门槛高吗审计实务网站建设论文
  • 网站建设心得wordpress广告插件汉化
  • 汽车网站开发深圳工作服制作
  • 嘉兴网站公司哪家好工程门户网站建设
  • 网站转化协会网站建设哪里实惠
  • 佛山市骏域网站建设专家wordpress支持空格键
  • 外贸网站建设渠道全屋定制营销
  • 网站搭建论文企业站seo哪家好
  • 网站出现的问题吗网盘资源共享群吧
  • 推进网站集约化建设制度淘宝网站制作培训