當前位置:首頁 » 安卓系統 » 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鍵
-

熱點內容
醫院新冠肺炎疫情防控演練腳本 發布:2024-04-27 04:04:45 瀏覽:652
天津智慧網關伺服器雲伺服器 發布:2024-04-27 03:56:51 瀏覽:422
移門製作下料尺寸演算法 發布:2024-04-27 03:15:02 瀏覽:641
c語言5常量 發布:2024-04-27 02:38:49 瀏覽:991
源碼怎麼搭建 發布:2024-04-27 02:33:44 瀏覽:97
java獲取參數 發布:2024-04-27 02:22:21 瀏覽:501
unixlinuxwindows 發布:2024-04-27 02:10:55 瀏覽:445
nginx禁止ip訪問網站 發布:2024-04-27 02:05:43 瀏覽:845
webrtc伺服器搭建哪家價格低 發布:2024-04-27 01:30:08 瀏覽:141
oracle資料庫無法啟動 發布:2024-04-27 01:29:20 瀏覽:613