當前位置:首頁 » 網購平台 » 加入購物車拋物線動畫
擴展閱讀
寧波奧德賽優惠價格 2021-03-15 14:26:02
丹尼斯購物卡能掛失么 2021-03-15 14:25:58
淘寶購物指紋驗證失敗 2021-03-15 14:24:44

加入購物車拋物線動畫

發布時間: 2021-02-08 02:01:26

① android想要畫一個拋物線,怎麼實現

效果圖中,拋物線的動畫即是由SurfaceView實現的。底部欄中的文字翻轉詳情相關帖子:
[Android] 文字翻轉動畫的實現

需求:
1.實現拋物線動畫
1.1 設計物理模型,能夠根據時間變數計算出某個時刻圖片的X/Y坐標。
1.2 將圖片高頻率(相比於UI線程的緩慢而言)刷新到界面中。這兒需要實現將臟界面清屏及刷新操作。
2.文字翻轉動畫(已解決,見上面的帖子鏈接)

下面來逐一解決所提出的問題。

-----------------------------------------------------------------------------
分隔線內容與Android無關,請慎讀,勿拍磚。謝啦

1.1 設計物理模型,如果大家還記得初中物理時,這並不難。自己寫的草稿圖見下:

可以有:圖片要從高度為H的位置下落,並且第一次與X軸碰撞時會出現能量損失,至原來的N%。並且我們需要圖片的最終落點離起始位置在X軸上的位移為L,默認存在重力加速度g。
詳細的物理分析見上圖啦,下面只說代碼中如何實現,相關代碼在PhysicalTool.java。
第一次下落過程所耗時t1與高度height會有如下關系:

[java] view plain
t1 = Math.sqrt(2 * height * 1.0d / GRAVITY);
[java] view plain
t1 = Math.sqrt(2 * height * 1.0d / GRAVITY);

第一次與X軸碰撞後上升至最高點的耗時t2與高度 N%*height會有:

[java] view plain
t2 = Math.sqrt((1 - WASTAGE) * 2 * height * 1.0d / GRAVITY);
[java] view plain
t2 = Math.sqrt((1 - WASTAGE) * 2 * height * 1.0d / GRAVITY);

那麼總的動畫時間為(t1 + t2 + t2),則水平位移速度有(width為X軸總位移):

[java] view plain
velocity = width * 1.0d / (t1 + 2 * t2);
[java] view plain
velocity = width * 1.0d / (t1 + 2 * t2);

則根據時間計算圖片的實時坐標有:
PhysicalTool.comput()

[java] view plain
double used = (System.currentTimeMillis() - startTime) * 1.0d / 1000;
x = velocity * used;
if (0 <= used && used < t1) {
y = height - 0.5d * GRAVITY * used * used;
} else if (t1 <= used && used < (t1 + t2)) {
double tmp = t1 + t2 - used;
y = (1 - WASTAGE) * height - 0.5d * GRAVITY * tmp * tmp;
} else if ((t1 + t2) <= used && used < (t1 + 2 * t2)) {
double tmp = used - t1 - t2;
y = (1 - WASTAGE) * height - 0.5d * GRAVITY * tmp * tmp;
}
[java] view plain
double used = (System.currentTimeMillis() - startTime) * 1.0d / 1000;
x = velocity * used;
if (0 <= used && used < t1) {
y = height - 0.5d * GRAVITY * used * used;
} else if (t1 <= used && used < (t1 + t2)) {
double tmp = t1 + t2 - used;
y = (1 - WASTAGE) * height - 0.5d * GRAVITY * tmp * tmp;
} else if ((t1 + t2) <= used && used < (t1 + 2 * t2)) {
double tmp = used - t1 - t2;
y = (1 - WASTAGE) * height - 0.5d * GRAVITY * tmp * tmp;
}
Android無關內容結束了。
----------------------------------------------------------------------------------------

1.2 SurfaceView刷新界面
SurfaceView是一個特殊的UI組件,特殊在於它能夠使用非UI線程刷新界面。至於為何具有此特殊性,將在另一個帖子"SurfaceView 相關知識筆記"中討論,該帖子將講述SurfaceView、Surface、ViewRoot、Window Manager/Window、Canvas等之間的關系。

使用SurfaceView需要自定義組件繼承該類,並實現SurfaceHolder.Callback,該回調提供了三個方法:

[java] view plain
surfaceCreated()//通知Surface已被創建,可以在此處啟動動畫線程
surfaceChanged()//通知Surface已改變
surfaceDestroyed()//通知Surface已被銷毀,可以在此處終止動畫線程
[java] view plain
surfaceCreated()//通知Surface已被創建,可以在此處啟動動畫線程
surfaceChanged()//通知Surface已改變
surfaceDestroyed()//通知Surface已被銷毀,可以在此處終止動畫線程

SurfaceView使用有一個原則,即該界面操作必須在surfaceCreated之後及surfaceDestroyed之前。該回調的監聽通過SurfaceHolder設置。代碼如下:

[java] view plain
//於SurfaceView類中,該類實現SurfaceHolder.Callback介面,如本例中的ParabolaView
SurfaceHolder holder = getHolder();
holder.addCallback(this);
[java] view plain
//於SurfaceView類中,該類實現SurfaceHolder.Callback介面,如本例中的ParabolaView
SurfaceHolder holder = getHolder();
holder.addCallback(this);

示例代碼中,通過啟動DrawThread調用handleThread()實現對SurfaceView的刷新。
刷新界面首先需要執行holder.lockCanvas()鎖定Canvas並獲得Canvas實例,然後進行界面更新操作,最後結束鎖定Canvas,提交界面更改,至Surface最終顯示在屏幕上。
代碼如下:

[java] view plain
canvas = holder.lockCanvas();
… … … …
… … … …
canvas.drawBitmap(bitmap, x, y, paint);
holder.unlockCanvasAndPost(canvas);
[java] view plain
canvas = holder.lockCanvas();
… … … …
… … … …
canvas.drawBitmap(bitmap, x, y, paint);
holder.unlockCanvasAndPost(canvas);

本例中,需要清除屏幕臟區域,出於簡便的做法,是將整個SurfaceView背景重復地設置為透明,代碼為:

[java] view plain
canvas.drawColor(Color.TRANSPARENT, android.graphics.PorterDuff.Mode.CLEAR);
[java] view plain
canvas.drawColor(Color.TRANSPARENT, android.graphics.PorterDuff.Mode.CLEAR);

對於SurfaceView的操作,下面這個鏈接講述得更詳細,更易理解,推薦去看下:
Android開發之SurfaceView

慣例,Java代碼如下,XML請自行實現

本文由Sodino所有,轉載請註明出處:http://blog.csdn.net/sodino/article/details/7704084

[java] view plain
ActSurfaceView.java

package lab.sodino.surfaceview;

import lab.sodino.surfaceview.RotateAnimation.InterpolatedTimeListener;
import android.app.Activity;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.os.Handler;
import android.os.Handler.Callback;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

public class ActSurfaceView extends Activity implements OnClickListener, ParabolaView.ParabolaListener, Callback,
InterpolatedTimeListener {
public static final int REFRESH_TEXTVIEW = 1;
private Button btnStartAnimation;
/** 動畫界面。 */
private ParabolaView parabolaView;
/** 購物車處顯示購物數量的TextView。 */
private TextView txtNumber;
/** 購物車中的數量。 */
private int number;
private Handler handler;
/** TextNumber是否允許顯示最新的數字。 */
private boolean enableRefresh;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

handler = new Handler(this);

number = 0;

btnStartAnimation = (Button) findViewById(R.id.btnStartAnim);
btnStartAnimation.setOnClickListener(this);

parabolaView = (ParabolaView) findViewById(R.id.surfaceView);
parabolaView.setParabolaListener(this);

txtNumber = (TextView) findViewById(R.id.txtNumber);
}

public void onClick(View v) {
if (v == btnStartAnimation) {
LogOut.out(this, "isShowMovie:" + parabolaView.isShowMovie());
if (parabolaView.isShowMovie() == false) {
number++;
enableRefresh = true;
parabolaView.setIcon(BitmapFactory.decodeResource(getResources(), R.drawable.icon));
// 設置起始Y軸高度和終止X軸位移
parabolaView.setParams(200, ((ViewGroup) txtNumber.getParent()).getLeft());
parabolaView.showMovie();
}
}
}

public void onParabolaStart(ParabolaView view) {

}

public void onParabolaEnd(ParabolaView view) {
handler.sendEmptyMessage(REFRESH_TEXTVIEW);
}

public boolean handleMessage(Message msg) {
switch (msg.what) {
case REFRESH_TEXTVIEW:

if (txtNumber.getVisibility() != View.VISIBLE) {
txtNumber.setVisibility(View.VISIBLE);
}
RotateAnimation anim = new RotateAnimation(txtNumber.getWidth() >> 1, txtNumber.getHeight() >> 1,
RotateAnimation.ROTATE_INCREASE);
anim.setInterpolatedTimeListener(this);
txtNumber.startAnimation(anim);
break;
}
return false;
}

@Override
public void interpolatedTime(float interpolatedTime) {
// 監聽到翻轉進度過半時,更新txtNumber顯示內容。
if (enableRefresh && interpolatedTime > 0.5f) {
txtNumber.setText(Integer.toString(number));
// Log.d("ANDROID_LAB", "setNumber:" + number);
enableRefresh = false;
}
}
}

② 怎樣利用Flash8.0製作一個小球作拋物線運動效果的動畫

引導層動畫搞定。用鉛筆畫出運動路徑,然後在有小球的圖層中作出運動漸變。

③ 怎樣用PPT製作拋物線動畫

PowerPoint2003製作拋物線動畫的方法_網路專文屬庫 http://wenku..com/link?url=-b0mI51gvaY7ivjNvQ_Q_

④ 如何用angularjs實現拋物線購物車效果

、使用任何語言創建一個服務端:
public class ShoppingCar
{
public string Title { get; set; }
public decimal UnitPrice { get; set; }
public int Count { get; set; }
}

public ActionResult GetCar()
{
List<ShoppingCar> cars = new List<ShoppingCar>
{
new ShoppingCar { Title="蘋果",Count=1,UnitPrice=2.5m},
new ShoppingCar { Title="香蕉",Count=3,UnitPrice=1.5m},
new ShoppingCar { Title="苦瓜",Count=1,UnitPrice=3.5m},
new ShoppingCar { Title="黃瓜",Count=3,UnitPrice=2.2m}
};
return Json(cars,JsonRequestBehavior.AllowGet);
}

⑤ 在flash中怎樣做拋物線動畫

1、先建兩個關鍵貞,分別在它們上面畫上物體的起點和終點。
2、在中間補間動畫的中間地方插入幀,把物體的最高點放在這那一幀上。(也就是說它需要三幀)

⑥ jquery拋物線動畫代碼怎麼實現

方法/步驟
1
首先需要引入一個jquery.fly.min.js文件(可自行搜索,也可以在本人的網路雲盤中找到)
2
設置拋物線的位置(起點也可以是整個頁面的可點擊區域,即body):
拋物線起點,此例中為.left_btn(標簽的classname)
拋物線終點,此例中為.gwcimg(標簽的classname)

3
創建JS方法:
$('.left_btn').on('click', addProct);
function addProct(event){
var offset = $(".gwcimg").offset(),
//拋物線圖片,可自行更改
flyer = $('<img src="brandmarket/image/gwc.png" width="36" height="36">');
flyer.fly({
start: {
left: event.pageX,
top: event.pageY
},
end: {
left: offset.left,
top: offset.top,
//拋物線完成後留在頁面上的圖片大小
width: 20,height: 20
}
});
}
4
大致有兩種效果,一種是每添加一次就在購物車的數字上加一,數字顯示的位置可以用CSS樣式控制,然後把上一步中「拋物線完成後留在頁面上的圖片大小」中寬高值都設置為0,效果如下:

5
另一種是將數字用圖片代替,此為默認的效果,改變瀏覽器大小的時候,用來代替的圖片會一直停留在絕對位置,效果如下:

http://jingyan..com/article/ceb9fb10c13bac8cac2ba05a.html

⑦ Jquery商品拋物線飛入購物車代碼

這個建議你去找現成js。。給你提供一個地址。。

http://www.zhangxinxu.com/wordpress/?p=3855

裡面有現成的方法。。



張鑫專旭同學的博客屬裡面有這樣的方法。。你可以去找的。

zhangxinxu.com/study/201312/js-parabola-shopping.html

就是這個地址啦。跟你這個一樣的效果

⑧ 如何用javascript實現天貓收藏商品進購物車的動畫效果

需要使用拋物線函數來對想要移動的元素進行編輯,你可以網路搜索JS拋物線函數,結果中前兩個,都有詳細的解釋和代碼。

⑨ iphone如何製作曲線動畫(模擬扔物品的那個拋物線)

quartZ中有CGMutablePathRef,就是為為動畫設置移動路徑的比如先設個動畫變數CAKeyframeAnimation *bounceAnimation = [CAKeyframeAnimation animationWithKeyPath:@"position"];然後設置一個路徑: CGMutablePathRef thePath = CGPathCreateMutable(); CGPathMoveToPoint(thePath, NULL, startPoint.x, startPoint.y); CGPathAddQuadCurveToPoint(thePath, NULL, 150, 30, endPoint.x, endPoint.y);註:startPoint是起點,endPoint是終點,150,30是x,y軸的控制點,自行調整數值可以出現理想弧度效果 把路徑給動畫變數,設置個動畫時間bounceAnimation.path = thePath; bounceAnimation.ration = 0.7;最後把這個動畫添加給view的layer[self.layer addAnimation:bounceAnimation forKey:@"move"];大致這樣就OK了