Ⅰ 淘寶裡面的刮刮卡在哪裡面!求幫助
淘寶裡面的刮刮卡只適用於手機和Ipad,需要下載一個淘寶手機客戶端,打開之後,頁面上就有大大的宣傳廣告,直接點擊進入即可。
1、手機參與方式:可以通過手機淘寶客戶端(ios3.4.0及以上或android3.9.3及以上版本)活動入口,或使用掃一掃功能掃描「3.8手機淘寶生活節」平面廣告上或淘寶、天貓頁面上的二維碼進入活動頁面
2、ipad參與方式:用戶可以通過ipad淘寶客戶端(2.3.3版本及以上)各活動入口點擊進入活動頁面。
Ⅱ 攜程那個刮刮卡是從客戶端哪裡進去啊
您好!感謝您對攜程旅行網的關注!
您登錄攜程旅行客戶端之後,在「我的-我的錢包-返現-2元博大禮 搶4999紅包」中進入刮刮卡的頁面哦。如有問題,建議您在關注攜程微信(iCtrip)後,在9:00-18:00之間發送「KF」進入人工告知您的訂單號及具體事宜,我們會有專員為您核實處理。
更多優惠信息,歡迎點擊這里:http://www.dwz.cn/sPrvQ了解一下~~
#搶500元紅包#活動火熱上線,下載「攜程旅行」APP↙↙↙
IOS客戶端:http://m.ctrip.com/m/c270?app=1;
Android客戶端:http://m.ctrip.com/m/c270?app=3,
☆立即領取專屬紅包,讓您的暑期不再「宅」~「攜程在手,說走就走!」
動動手指,掃描以下二維碼圖片即可下載,預訂咨詢更容易哦~
Ⅲ Android 自定義控制項實現刮刮卡效果 真的就只是刮刮卡么
新手的話,先學習一下現有的控制項怎麼用,如何把它們組織起來完成特定的任務,熟悉之後再琢磨自定義控制項開發也不遲的。學習不只是看示例,試著寫一寫,運行一下,成功以後再考慮如何作出改動,動手比較重要,比你看十遍的效果都要好得多,希望對你有幫助。
Ⅳ android ui開發中,常見的刮刮卡是通過什麼布局實現的
思想:
將一個View設計成多層,內層(包括中獎信息)和外層(用於刮獎),外層的圖層用Canvas與一個Bitmap關聯,用這個關聯的Bitmap來處理手勢的滑動,類似於刮獎的動作。
使用paint.setXfermode 來進行消除手勢滑動區域
package com.jackie.guaguale;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
/**
* Created by Administrator on 2015/7/29.
*/
public class GuaView extends View {
private Path mPath;
private Paint mInnerPaint; //內層圖層Paint
private Paint mOuterPaint; //外層圖層Paint
private Bitmap mGuaBitmap; //用於處理刮獎的Bitmap
private Bitmap mOuterBitmap; //外層圖層Bitmap
private Canvas mCanvas;
private int mWidth, mHeight;
private float mLastX;
private float mLastY;
private String mText;
public GuaView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init() {
mPath = new Path();
mOuterPaint = new Paint();
mInnerPaint = new Paint();
//創建外層圖層
mOuterBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.guaguaka).(Bitmap.Config.ARGB_8888, true);
mText = ¥500;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
mWidth = mOuterBitmap.getWidth();
mHeight = mOuterBitmap.getHeight();
//創建內層圖層
mGuaBitmap = Bitmap.createBitmap(mWidth, mHeight, Bitmap.Config.ARGB_8888);
mCanvas = new Canvas(mGuaBitmap);
mCanvas.drawBitmap(mOuterBitmap, 0, 0, null); //將mOuterBitmap畫到mCanvas上,與mGuaBitmap關聯
setOuterPaint();
setInnerPaint();
}
private void setInnerPaint() {
mInnerPaint.setColor(Color.RED);
mInnerPaint.setStyle(Paint.Style.STROKE);
mInnerPaint.setStrokeCap(Paint.Cap.ROUND);
mInnerPaint.setStrokeJoin(Paint.Join.ROUND);
mInnerPaint.setAntiAlias(true);
mInnerPaint.setDither(true); //防抖
mInnerPaint.setStrokeWidth(5);
mInnerPaint.setTextSize(100);
mInnerPaint.setTextAlign(Paint.Align.CENTER);
}
private void setOuterPaint() {
mOuterPaint.setColor(Color.GREEN);
mOuterPaint.setStyle(Paint.Style.STROKE);
mOuterPaint.setStrokeCap(Paint.Cap.ROUND);
mOuterPaint.setStrokeJoin(Paint.Join.ROUND);
mOuterPaint.setAntiAlias(true);
mOuterPaint.setDither(true); //防抖
mOuterPaint.setStrokeWidth(20);
}
@Override //Path
public boolean onTouchEvent(MotionEvent event) {
float x = event.getX();
float y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mLastX = x;
mLastY = y;
mPath.moveTo(x, y);
break;
case MotionEvent.ACTION_MOVE:
float deltaX = Math.abs(x - mLastX);
float deltaY = Math.abs(y - mLastY);
if (deltaX > 5 || deltaY > 5) {
mPath.lineTo(x, y);
}
mLastX = x;
mLastY = y;
break;
case MotionEvent.ACTION_UP:
break;
}
invalidate();
return true;
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawColor(Color.parseColor(#bbbbbb)); //背景底色 灰色
canvas.drawText(mText, mWidth / 2, mHeight / 4 * 3, mInnerPaint); //繪制文本
canvas.drawBitmap(mGuaBitmap, 0, 0, null); //繪制外層Bitmap, 將mBitmap顯示在界面上
drawPath();
}
private void drawPath() {
//使用該mode:dst和src相交後, 只保留dst,且除去相交的部份
mOuterPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));
mCanvas.drawPath(mPath, mOuterPaint);
}
}
Ⅳ 我不能刮刮刮卡是怎樣問題
備註:目前安卓4.1的系統跟微信4.5有些兼容性問題,導致刮刮卡不能刮,還是可以抽獎,就是少了刮的體驗,其他都正常,如果介意的話,請等待微信升級解決此問題後
Ⅵ 天貓刮刮卡在哪裡進入
淘寶里的刮刮卡只適用於手機和Ipad。你需要下載一個淘寶手機客戶端。打開之後,頁面上會出現一個大大的廣告。點擊進入即可。
1.手機參與:可通過手機淘寶客戶端(ios3.4.0及以上或android3.9.3及以上)的活動入口進入活動頁面,或使用掃描功能掃描「3.8手機淘寶生活節」平面廣告或淘寶、天貓頁面上的二維碼。
2.ipad參與模式:用戶可以通過ipad淘寶客戶端(2.3.3及以上版本)的活動入口點擊進入活動頁面。
Ⅶ 如何用android開發otp
otp從技術來分有三種形式, 時間同步、事件同步、挑戰/應答。
(1) 時間同步
原理是基於 動態令牌和 動態口令驗證伺服器的時間比對,基於 時間同步的 令牌,一般每60秒產生一個新口令,要求伺服器能夠十分精確的保持正確的時鍾,同時對其令牌的晶振頻率有嚴格的要求,這種技術對應的終端是硬體令牌。
(2)事件同步
基於事件同步的令牌,其原理是通過某一特定的事件次序及相同的種子值作為輸入,通過HASH演算法中運算出一致的密碼。
(3)挑戰/應答
常用於的網上業務,在網站/應答上輸入 服務端下發的 挑戰碼, 動態令牌輸入該挑戰碼,通過內置的演算法上生成一個6/8位的隨機數字,口令一次有效,這種技術目前應用最為普遍,包括刮刮卡、簡訊密碼、動態令牌也有挑戰/應答形式。
主流的動態令牌技術是時間同步和挑戰/應答兩種形式。
項目採用:
https://code.google.com/p/androidtoken/ 實現TOTP動態口令登錄
android token 該項目支持HOTP (事件令牌)和TOTP (時間令牌)規范
配置令牌支持:KeyUriFormat和QR碼,以及手動創建;
項目實現:
我這里採用添加方便的qr碼,也就是常見的二維碼來實現用戶通過手機來綁定一個token;
首先,需要有的就是伺服器端和客戶端都共有的一個seed。
private final static String NUM_CHAR = "0123456789";
private static int charLen = NUM_CHAR.length();
/**
* 根據系統時間獲得指定位數的隨機數
* @param randomNumberDigit 隨機數的位數
* @return 獲得的隨機數
*/
public static String getRandomNumber(int randomNumberDigit) {
long seed = System.currentTimeMillis();// 獲得系統時間,作為生成隨機數的種子
StringBuffer sb = new StringBuffer();// 裝載生成的隨機數
Random random = new Random(seed);// 調用種子生成隨機數
for (int i = 0; i < randomNumberDigit; i++) {
sb.append(NUM_CHAR.charAt(random.nextInt(charLen)));
}
return sb.toString();
}
Ⅷ html5 canvas 刮刮卡問題
<!DOCTYPEhtml>
<html>
<head>
<metahttp-equiv="content-type"content="text/html;charset=UTF-8">
<title>-jsFiddledemobyartwl</title>
<scripttype='text/javascript'src='/js/lib/mmy.js'></script>
<linkrel="stylesheet"type="text/css"href="/css/result-light.css">
<styletype='text/css'>
body{
height:1000px;
}
#lotteryContainer{
position:relative;
width:300px;
height:100px;
}
#drawPercent{
color:#F60;
}
</style>
</head>
<body>
<buttonid="freshBtn">刷新</button><label>已刮開<spanid="drawPercent">0%</span>區域。</label>
<divid="lotteryContainer"></div><scripttype='text/javascript'>//<![CDATA[
functionLottery(id,cover,coverType,width,height,drawPercentCallback){
this.conId=id;
this.conNode=document.getElementById(this.conId);
this.cover=cover;
this.coverType=coverType;
this.background=null;
this.backCtx=null;
this.mask=null;
this.maskCtx=null;
this.lottery=null;
this.lotteryType='image';
this.width=width||300;
this.height=height||100;
this.clientRect=null;
this.drawPercentCallback=drawPercentCallback;
}
Lottery.prototype={
createElement:function(tagName,attributes){
varele=document.createElement(tagName);
for(varkeyinattributes){
ele.setAttribute(key,attributes[key]);
}
returnele;
},
getTransparentPercent:function(ctx,width,height){
varimgData=ctx.getImageData(0,0,width,height),
pixles=imgData.data,
transPixs=[];
for(vari=0,j=pixles.length;i<j;i+=4){
vara=pixles[i+3];
if(a<128){
transPixs.push(i);
}
}
return(transPixs.length/(pixles.length/4)*100).toFixed(2);
},
resizeCanvas:function(canvas,width,height){
canvas.width=width;
canvas.height=height;
canvas.getContext('2d').clearRect(0,0,width,height);
},
drawPoint:function(x,y){
this.maskCtx.beginPath();
varradgrad=this.maskCtx.createRadialGradient(x,y,0,x,y,30);
radgrad.addColorStop(0,'rgba(0,0,0,0.6)');
radgrad.addColorStop(1,'rgba(255,255,255,0)');
this.maskCtx.fillStyle=radgrad;
this.maskCtx.arc(x,y,30,0,Math.PI*2,true);
this.maskCtx.fill();
if(this.drawPercentCallback){
this.drawPercentCallback.call(null,this.getTransparentPercent(this.maskCtx,this.width,this.height));
}
},
bindEvent:function(){
var_this=this;
vardevice=(/android|webos|iphone|ipad|ipod|blackberry|iemobile|operamini/i.test(navigator.userAgent.toLowerCase()));
varclickEvtName=device?'touchstart':'mousedown';
varmoveEvtName=device?'touchmove':'mousemove';
if(!device){
varisMouseDown=false;
document.addEventListener('mouseup',function(e){
isMouseDown=false;
},false);
}else{
document.addEventListener("touchmove",function(e){
if(isMouseDown){
e.preventDefault();
}
},false);
document.addEventListener('touchend',function(e){
isMouseDown=false;
},false);
}
this.mask.addEventListener(clickEvtName,function(e){
isMouseDown=true;
vardocEle=document.documentElement;
if(!_this.clientRect){
_this.clientRect={
left:0,
top:0
};
}
varx=(device?e.touches[0].clientX:e.clientX)-_this.clientRect.left+docEle.scrollLeft-docEle.clientLeft;
vary=(device?e.touches[0].clientY:e.clientY)-_this.clientRect.top+docEle.scrollTop-docEle.clientTop;
_this.drawPoint(x,y);
},false);
this.mask.addEventListener(moveEvtName,function(e){
if(!device&&!isMouseDown){
returnfalse;
}
vardocEle=document.documentElement;
if(!_this.clientRect){
_this.clientRect={
left:0,
top:0
};
}
varx=(device?e.touches[0].clientX:e.clientX)-_this.clientRect.left+docEle.scrollLeft-docEle.clientLeft;
vary=(device?e.touches[0].clientY:e.clientY)-_this.clientRect.top+docEle.scrollTop-docEle.clientTop;
_this.drawPoint(x,y);
},false);
},
drawLottery:function(){
this.background=this.background||this.createElement('canvas',{
style:'position:absolute;left:0;top:0;'
});
this.mask=this.mask||this.createElement('canvas',{
style:'position:absolute;left:0;top:0;'
});
if(!this.conNode.innerHTML.replace(/[wW]|/g,'')){
this.conNode.appendChild(this.background);
this.conNode.appendChild(this.mask);
this.clientRect=this.conNode?this.conNode.getBoundingClientRect():null;
this.bindEvent();
}
this.backCtx=this.backCtx||this.background.getContext('2d');
this.maskCtx=this.maskCtx||this.mask.getContext('2d');
if(this.lotteryType=='image'){
varimage=newImage(),
_this=this;
image.onload=function(){
_this.width=this.width;
_this.height=this.height;
_this.resizeCanvas(_this.background,this.width,this.height);
_this.backCtx.drawImage(this,0,0);
_this.drawMask();
}
image.src=this.lottery;
}elseif(this.lotteryType=='text'){
this.width=this.width;
this.height=this.height;
this.resizeCanvas(this.background,this.width,this.height);
this.backCtx.save();
this.backCtx.fillStyle='#FFF';
this.backCtx.fillRect(0,0,this.width,this.height);
this.backCtx.restore();
this.backCtx.save();
varfontSize=30;
this.backCtx.font='Bold'+fontSize+'pxArial';
this.backCtx.textAlign='center';
this.backCtx.fillStyle='#F60';
this.backCtx.fillText(this.lottery,this.width/2,this.height/2+fontSize/2);
this.backCtx.restore();
this.drawMask();
}
},
drawMask:function(){
this.resizeCanvas(this.mask,this.width,this.height);
if(this.coverType=='color'){
this.maskCtx.fillStyle=this.cover;
this.maskCtx.fillRect(0,0,this.width,this.height);
this.maskCtx.globalCompositeOperation='destination-out';
}elseif(this.coverType=='image'){
varimage=newImage(),
_this=this;
image.onload=function(){
_this.maskCtx.drawImage(this,0,0);
_this.maskCtx.globalCompositeOperation='destination-out';
}
image.src=this.cover;
}
},
init:function(lottery,lotteryType){
this.lottery=lottery;
this.lotteryType=lotteryType||'image';
this.drawLottery();
}
}
window.onload=function(){
varlottery=newLottery('lotteryContainer','#CCC','color',300,100,drawPercent);
lottery.init('http://www..com/img/bdlogo.gif','image');
document.getElementById('freshBtn').onclick=function(){
drawPercentNode.innerHTML='0%';
lottery.init(getRandomStr(10),'text');
}
vardrawPercentNode=document.getElementById('drawPercent');
functiondrawPercent(percent){
drawPercentNode.innerHTML=percent+'%';
}
}
functiongetRandomStr(len){
vartext="";
varpossible="";
for(vari=0;i<len;i++)
text+=possible.charAt(Math.floor(Math.random()*possible.length));
returntext;
}
//]]>
</script>
</body>
</html>
親,看看這個對你有幫助么