当前位置:首页 » 安卓系统 » android评分

android评分

发布时间: 2022-01-29 04:24:26

① androidstudio怎么实现app评分兴县

在XML中
<com.hedgehog.ratingbar.RatingBar
android:layout_marginTop="50dp"
android:layout_gravity="center"
android:id="@+id/ratingbar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
hedgehog:starCount="5"
hedgehog:clickable="true"
hedgehog:starEmpty="@mipmap/ic_star_empty"
hedgehog:starFill="@mipmap/ic_star_fill"
hedgehog:starImageSize="30dp"
/>

② 我现在要做一个android软件的一个功能,该功能使用户可以给该软件打分并将所打的分数上传至谷歌电子市场

软件的评分是在Android电子市场中由用户进行评分,你自己的评分Android电子市场怎么可能承认呢?

③ 如何评价 Android M

2015年5月28日,Google I/O大会上正式推出Android M。[1] 北京时间8月18日早间消息,谷歌周一宣布,Android M中的“M”是单词“Marshmallow”(棉花糖)的缩写。此前,Android M的“M”引起了种种猜测,其中包括Milkshake(奶昔)、Moonpie(月饼)、Mocha(摩卡咖啡)、Madeleine(玛德琳蛋糕)、Macaroon(马卡龙),以及M&M巧克力豆等。[2]
中文名
安卓M
外文名
Android M
代 号
棉花糖Marshmallow
发布时间
2015年5月28日

④ android 五星打分控件星星大小怎么控制

由于Android自身的星星评分控件样式可以改,但是他的大小不好调整的缺点,只能用small normal这样的style调整,自定义不强,因此击发了我自定义星星控件的欲望。
星星评分控件的设计,大体规划为:
需要两张图片,一颗亮星星,一颗空星星;(当然图片不一定是星星,其他图片也可以,现在实验就用星星就好了)星星数量,间距可以自定义,星星的最小步进为0.1,在用户使用的时候与Android自带的方法一样。
星星控件大体分为两层,第一层空星星,第二层亮星星,第一层固定,第二层动态绘制,这样就可以实现评分。
在画星星的时候,由于在xml得出回来的对象是drawable,不必再转换为bitmap绘制,故直接绘制drawable,并且提升效率。
绘制drawable需要两个方法就够了
1、设置绘制到那里:
setBounds(int left ,int top , int right ,int bottom);
2、绘制:
draw(Canvas canvas);
设置错误setBounds会导致绘制变形:

把setbounds设置好后就一切正常:

经过一个for循环,五颗空星星就出来了,哈哈
for (int i = 0;i < starCount;i++) {
starEmptyDrawable.setBounds(starSize * i, 0, starSize * (i + 1), starSize);
starEmptyDrawable.draw(canvas);
}

for (int i = 0;i < starCount;i++) {
starEmptyDrawable.setBounds(starSize * i, 0, starSize * (i + 1), starSize);
starEmptyDrawable.draw(canvas);
}
for (int i = 0;i < starCount -1;i++) {
starFillDrawable.setBounds(starSize * i, 0, starSize * (i + 1), starSize);
starFillDrawable.draw(canvas);
}

上面几行代码成功强行装成了一个评了4分的
现在,显示几颗几颗的星星无压力,但是我们目标是需要步进为0.1的星星。
But
经过一系列的实验,发现Drawable对象没有能指定绘制需要的部分,也就是不能绘制半颗星星(反正找不到,找到可以评论告诉我),然后就采用了折中的方法,把Drawable对象变为Bitmap这样就好办了,再利用BitmapShader,想绘制多少就绘制多上(就是实现0.1步进),下面为1/3颗的效果:

转换方法:
private Bitmap drawableToBitmap(Drawable drawable)
{
if (drawable == null)return null;
Bitmap bitmap = Bitmap.createBitmap(starSize, starSize, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, starSize, starSize);
drawable.draw(canvas);
return bitmap;
}

把Bitmap转换为画笔绘制:
paint = new Paint();
paint.setAntiAlias(true);
paint.setShader(new BitmapShader(starFillBitmap, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
在ondraw()方法绘制(三分之一个)

canvas.drawRect(0,0,starSize/3,starSize,paint);

原理就是这样,剩下就是逻辑问题了,以下为星星控件代码:
package com.dming.starbar;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
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;

/**
* Created by DMing on 2016/7/18.
*
*/
public class StarBar extends View{
private int starDistance = 0; //星星间距
private int starCount = 5; //星星个数
private int starSize; //星星高度大小,星星一般正方形,宽度等于高度
private float starMark = 0.0F; //评分星星
private Bitmap starFillBitmap; //亮星星
private Drawable starEmptyDrawable; //暗星星
private OnStarChangeListener onStarChangeListener;//监听星星变化接口
private Paint paint; //绘制星星画笔
private boolean integerMark = false;
public StarBar(Context context, AttributeSet attrs) {
super(context, attrs);
init(context, attrs);
}

public StarBar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs);
}

/**
* 初始化UI组件
*
* @param context
* @param attrs
*/
private void init(Context context, AttributeSet attrs){
setClickable(true);
TypedArray mTypedArray = context.obtainStyledAttributes(attrs, R.styleable.RatingBar);
this.starDistance = (int) mTypedArray.getDimension(R.styleable.RatingBar_starDistance, 0);
this.starSize = (int) mTypedArray.getDimension(R.styleable.RatingBar_starSize, 20);
this.starCount = mTypedArray.getInteger(R.styleable.RatingBar_starCount, 5);
this.starEmptyDrawable = mTypedArray.getDrawable(R.styleable.RatingBar_starEmpty);
this.starFillBitmap = drawableToBitmap(mTypedArray.getDrawable(R.styleable.RatingBar_starFill));
mTypedArray.recycle();

paint = new Paint();
paint.setAntiAlias(true);
paint.setShader(new BitmapShader(starFillBitmap, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP));
}

/**
* 设置是否需要整数评分
* @param integerMark
*/
public void setIntegerMark(boolean integerMark){
this.integerMark = integerMark;
}

/**
* 设置显示的星星的分数
*
* @param mark
*/
public void setStarMark(float mark){
if (integerMark) {
starMark = (int)Math.ceil(mark);
}else {
starMark = Math.round(mark * 10) * 1.0f / 10;
}
if (this.onStarChangeListener != null) {
this.onStarChangeListener.onStarChange(starMark); //调用监听接口
}
invalidate();
}

/**
* 获取显示星星的数目
*
* @return starMark
*/
public float getStarMark(){
return starMark;
}

/**
* 定义星星点击的监听接口
*/
public interface OnStarChangeListener {
void onStarChange(float mark);
}

/**
* 设置监听
* @param onStarChangeListener
*/
public void setOnStarChangeListener(OnStarChangeListener onStarChangeListener){
this.onStarChangeListener = onStarChangeListener;
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
setMeasuredDimension(starSize * starCount + starDistance * (starCount - 1), starSize);
}

@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (starFillBitmap == null || starEmptyDrawable == null) {
return;
}
for (int i = 0;i < starCount;i++) {
starEmptyDrawable.setBounds((starDistance + starSize) * i, 0, (starDistance + starSize) * i + starSize, starSize);
starEmptyDrawable.draw(canvas);
}
if (starMark > 1) {
canvas.drawRect(0, 0, starSize, starSize, paint);
if(starMark-(int)(starMark) == 0) {
for (int i = 1; i < starMark; i++) {
canvas.translate(starDistance + starSize, 0);
canvas.drawRect(0, 0, starSize, starSize, paint);
}
}else {
for (int i = 1; i < starMark - 1; i++) {
canvas.translate(starDistance + starSize, 0);
canvas.drawRect(0, 0, starSize, starSize, paint);
}
canvas.translate(starDistance + starSize, 0);
canvas.drawRect(0, 0, starSize * (Math.round((starMark - (int) (starMark))*10)*1.0f/10), starSize, paint);
}
}else {
canvas.drawRect(0, 0, starSize * starMark, starSize, paint);
}
}

@Override
public boolean onTouchEvent(MotionEvent event) {
int x = (int) event.getX();
if (x < 0) x = 0;
if (x > getMeasuredWidth()) x = getMeasuredWidth();
switch(event.getAction()){
case MotionEvent.ACTION_DOWN: {
setStarMark(x*1.0f / (getMeasuredWidth()*1.0f/starCount));
break;
}
case MotionEvent.ACTION_MOVE: {
setStarMark(x*1.0f / (getMeasuredWidth()*1.0f/starCount));
break;
}
case MotionEvent.ACTION_UP: {
break;
}
}
invalidate();
return super.onTouchEvent(event);
}

/**
* drawable转bitmap
*
* @param drawable
* @return
*/
private Bitmap drawableToBitmap(Drawable drawable)
{
if (drawable == null)return null;
Bitmap bitmap = Bitmap.createBitmap(starSize, starSize, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, starSize, starSize);
drawable.draw(canvas);
return bitmap;
}
}

attrs的文件:

XML的使用方式:

⑤ 求解android K歌软件的录音评分方法设计,MFCC语音评分系统可以借鉴吗谢谢……

由于我不懂MFC 但是方式应该是可以借鉴的
例如将一首歌中间的几个点采集一下声音的相关指标存储 然后将演唱者相关信息对比

由于我本身没有写过这种软件 只是写过播放器这类东西 所以不是太了解 建议去CSDN或者ITEYE上进行求助

⑥ iOS安兔兔和Android安兔兔评分标准有差别吗

应该有。iPhone系列硬件配置不高,是系统好,ios版不能和安卓版相提并论

⑦ Android Market 应用的排名规则是什么

众所周知,做搜索出身的Google,旗下的Market的排名肯定是依据一个形同( A×a% + B×b% + C×c%)的公式计算出来的数值,进行排名的。开发者可根据其排名规则,对自己的产品设计和研发以及推广进行指导。
1. 排名公式里有哪些指标?
指标A、B、C到底是什么?权重a、b、c究竟是多少?这些问题的答案,应该是每个App开发者和运营者都渴望了解的。知道了这个答案之后,有些“聪明”的人就会像当年SP的从业者一样,去刷那些权重大的指标、从而拉升产品的排名了。网上关于此问题的讨论很多都是不了了之、无疾而终。相对较深入的一篇文章《Android Market App Rankings》,也只是在猜想是基于“安装量”的增长和留存。可惜,该作者离正确答案就差一步了……
也许你已经等得不耐烦了,哈哈。现在就说说我的结论吧。指标A=“总安装/总下载”,即下载转安装的转换率;B=“评分/5”,即产品得分比上Market的满分;C=“留存安装/总安装”,即安装的留存率。不要急着问我a、b、c等于多少,准确数值只有Google知道、而且可以调,我只能告诉你它们加起来等于100,还有就是b > max(a,c)(为什么?下面耐心看)。
依据这个推断公式,就是说如果每个下载的用户都安装了、而且都给了5分、并且一直都没有卸载——OK.不论a、b、c是多少,你的产品得了满分,它就是No.1!
2. 为什么是它们?
在告诉你为什么是A、B、C之前,我先告诉你为什么不是D、E、F……
先看个数据,Android Market-通信-免费-TOP25:
去掉了产品名称,我们可以看到更纯的数据。
首先,我们可以肯定的排除排名是按“下载次数”排序的,下载次数1万+的产品(第9位)居然排到了下载次数500万+(第11位)的前面。试想第11位的产品在喊:“这是为什么?它哪点比我好???”——答案:请看“评分”。啊?它是5分!没错,第9位的产品评分得了满分。哦,排除了D的同时,我们收获了B。
其次,我们可以排除“评分人数”。原因就是,在“下载次数”和“评分”都同等量级的情况下,比对了若干样本,都无章可循——实在跟“评分人数”不相干。E被干掉了。
再次,要排除的是“加速度”。很多人在猜测会有一个“加速度”指标,或者新增下载的、或是新增安装的。大家的这种猜测是源自于“鼓励新产品”,但是这是一种过于激进的想法。Market这么大盘子是要鼓励推陈出新的,但“保护”新产品的同时也得“爱护”那些确实有实力的老产品。过大的用户基数,肯定会拖慢老牛产品的“加速度”,如果这么做的话每天的TOP10都是面目全非的(App Store的排名规则里就有“加速度”,所以TOP榜天天易容)。所以,“加速度”也不是真正的公平。
排除了D、E、F,收获了B。那A和C是从哪来的?
休息一下,问个题外话?我们一般是怎么评判一个物品的“好”“坏”的?是不是有以下部分组成?有一样东西摆在你面前,勾起了你试用的欲望。试用之后,你可能爱不释手,继续用吧。路遥知马力,又用了一段时间,你又有了新的评判。如果这个东西实在是太好了,那你就会与它形影不离……回归到我们判断一个物品的标准的本质,无非就是是否“接受它”、是否“肯定它”、是否“留着它”。
言归正传,用户是否“接受”一个App——下载只是“抬头”,安装才是“点头”。如果单以“安装”为指标,又会让老产品滚雪球,有失公平。所以,A(下载转安装的转化率)浮出水面了。“安装”做分母,“下载”做分子。一方面,排名在前的产品下载量越高、安装量就有可能越高的同时,如果产品不够好“下载量”越高就可能成了拖后腿的那个分母,上面举例的第11位产品就是个例子(庞大的下载量下,安装量无法保持同步增长,所以让其难堪重负,排名下落——剧透下,第11位是曾经“通信”下排名第1的产品KakaoTalk)。另一方面,只要A(还有B、C)足够好,也让一些新产品可以冒出头来。
B(评分)刚才已经分析到了,这里需要补充一点的是:评分不是一次性的。我们会发现在Market里“评分”是可以多次修改的,这样的目的就是鞭策产品要持续的“好”,用户一直掌握着产品的“生杀大权”。另外,就是为什么前文说到b大于a和c,原因就是纵观TOP100,评分低于4分的只有两个;TOP25,评分低于4的是零个;TOP10,评分低于4.5的只有一个(避免出现App Store里《小姐日记》这样低分却长期占据高排位的现象)——一言以蔽之:要想在前排就坐,产品首先得让用户觉得“好”。
该说说C(安装留存率)的出处。说白了就是控制流失率,如果“总安装”很高、但是“留存安装”很少,那也不能称之为“好”产品。所以,安装留存率就是另一个全面衡量产品优劣的指标。
3. 它们到底是多少?
前文已经说到b比a和c都大,那a和c孰大孰小呢?这个取决于Android Market的策略,如果“a比c大”意味着“更看重新增”(任何一个店铺先开张的时候,都会最看重这个)、如果“c比a大”意味着“更看重留存”(对于一个已经把客流吃透的老店,会更看重这个)——所以,这个真是可以调的,取决于Android Market发展到哪个阶段和运营管理者的自我认识。
4. 感言
Android Market如果真是我想象的这样排名,可谓新老兼顾,攻防兼备。
说它新老兼顾,是因为它让新鲜的好的新产品既能快速冒出来、也能让它经得起时间的推敲,或昙花一现或源远流长。说它攻守兼备,是因为这样会把盘子越做越大,而且也防止了“刷”(能刷上去,但是刷上去之后如果产品不够好,会让产品跌得更惨),把盘子越做越牢。这样公平的规则,也为Android Market的应用量新增速度已超过App Store提供了另一个有力的支持。高!实在是高!

⑧ android 如何实现 边录音 同时显示 歌词评分有原理,代码就好了。。

歌曲播放时歌词同步显示,我们需要读取以上歌词文件的每一行转换成成一个个歌词实体,可根据当前播放器的播放进度与每句歌词的开始时间,得到当前屏幕中央高亮显示的那句歌词
我们需要读取以上歌词文件的每一行转换成成一个个歌词实体:
代码如下:

public class LyricObject {
public int begintime; // 开始时间
public int endtime; // 结束时间
public int timeline; // 单句歌词用时
public String lrc; // 单句歌词
}

可根据当前播放器的播放进度与每句歌词的开始时间,得到当前屏幕中央高亮显示的那句歌词。在UI线程中另起线程,通过回调函数 onDraw() 每隔100ms重新绘制屏幕,实现歌词平滑滚动的动画效果。MainActivity代码如下:
代码如下:

import java.io.IOException;
import android.app.Activity;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
public class MainActivity extends Activity {
/** Called when the activity is first created. */
private LyricView lyricView;
private MediaPlayer mediaPlayer;
private Button button;
private SeekBar seekBar;
private String mp3Path;
private int INTERVAL=45;//歌词每行的间隔
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// this.requestWindowFeature(Window.FEATURE_NO_TITLE);
// getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.main);
mp3Path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/LyricSync/1.mp3";
lyricView = (LyricView) findViewById(R.id.mylrc);
mediaPlayer = new MediaPlayer();
// this.requestWindowFeature(Window.FEATURE_NO_TITLE);
ResetMusic(mp3Path);
SerchLrc();
lyricView.SetTextSize();
button = (Button) findViewById(R.id.button);
button.setText("播放");
seekBar = (SeekBar) findViewById(R.id.seekbarmusic);
seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO Auto-generated method stub
if (fromUser) {
mediaPlayer.seekTo(progress);
lyricView.setOffsetY(220 - lyricView.SelectIndex(progress)
* (lyricView.getSIZEWORD() + INTERVAL-1));
}
}
});
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (mediaPlayer.isPlaying()) {
button.setText("播放");
mediaPlayer.pause();
} else {
button.setText("暂停");
mediaPlayer.start();
lyricView.setOffsetY(220 - lyricView.SelectIndex(mediaPlayer.getCurrentPosition())
* (lyricView.getSIZEWORD() + INTERVAL-1));
}
}
});
mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
ResetMusic(mp3Path);
lyricView.SetTextSize();
lyricView.setOffsetY(200);
mediaPlayer.start();
}
});
seekBar.setMax(mediaPlayer.getDuration());
new Thread(new runable()).start();
}
public void SerchLrc() {
String lrc = mp3Path;
lrc = lrc.substring(0, lrc.length() - 4).trim() + ".lrc".trim();
LyricView.read(lrc);
lyricView.SetTextSize();
lyricView.setOffsetY(350);
}
public void ResetMusic(String path) {
mediaPlayer.reset();
try {
mediaPlayer.setDataSource(mp3Path);
mediaPlayer.prepare();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
class runable implements Runnable {
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
try {
Thread.sleep(100);
if (mediaPlayer.isPlaying()) {
lyricView.setOffsetY(lyricView.getOffsetY() - lyricView.SpeedLrc());
lyricView.SelectIndex(mediaPlayer.getCurrentPosition());
seekBar.setProgress(mediaPlayer.getCurrentPosition());
mHandler.post(mUpdateResults);
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
Handler mHandler = new Handler();
Runnable mUpdateResults = new Runnable() {
public void run() {
lyricView.invalidate(); // 更新视图
}
};
}

⑨ 腾讯视频Android客户端怎么评分

在手机上给腾讯视频评分的方法如下:

1.打开手机,在手机桌面点击进入app store。

⑩ androidstudio怎么快速打分号

输入sout然后按tab键
-

热点内容
jdk源码怎么看 发布:2024-05-07 20:18:22 浏览:517
编程c语言自学书 发布:2024-05-07 20:12:03 浏览:421
usb大容量存储驱动 发布:2024-05-07 19:02:01 浏览:815
红米1s没有存储空间 发布:2024-05-07 18:59:09 浏览:505
妖云解压密码 发布:2024-05-07 18:50:08 浏览:1002
sql语句等于怎么写 发布:2024-05-07 18:05:46 浏览:816
我的世界电脑版第三方服务器大全 发布:2024-05-07 18:00:46 浏览:627
主服务器的ip地址 发布:2024-05-07 17:58:50 浏览:546
组服务器打电脑游戏 发布:2024-05-07 17:46:19 浏览:866
java的文件路径 发布:2024-05-07 16:55:29 浏览:293