Измените ширину и высоту фильма:
Добавьте этот код в метод onDraw перед movie.draw
canvas.scale((float)this.getWidth() / (float)movie.width(),(float)this.getHeight() / (float)movie.height());
или
canvas.scale(1.9f, 1.21f); //this changes according to screen size
Масштаб для заполнения и масштаб для соответствия:
Уже есть хороший ответ на этот вопрос:
Я написал в блоге сообщение об этой самой теме, включая полный исходный код.
Он позволяет вам шифровать и расшифровывать данные, хранящиеся в форме строки запроса, используя 16 char key:
Я нашел отличный набор базовых классов для решения этой проблемы, но в большинстве случаев часть сводится к одному классу. Для этого класса требуется 16-символьный ключ какое-то значение для шифрования и значение для шифрования. Вы также можете при необходимости установите срок действия.
using System.Collections.Specialized;
using System.Security;
using System.Text;
using System.Web;
using EncryptionMVC.Security.Encryption.Utility.Interfaces;
using EncryptionMVC.Security.Encryption.Utility;
namespace Security.Encryption.QueryString
{
///
/// Provides a secure means for transfering data within a query string.
///
public class SecureQueryString : NameValueCollection
{
private string timeStampKey = '__TS__';
private string dateFormat = 'G';
private IEncryptionUtility mEncryptionUtil;
private DateTime m_expireTime = DateTime.MaxValue;
///
/// Creates an instance with a specified key.
///
/// The key used for cryptographic functions, required 16 chars in length.
public SecureQueryString(string key) : base()
{
mEncryptionUtil = new EncryptionUtility(key);
}
///
/// Creates an instance with a specified key and an encrypted query string.
///
/// The key used for cryptographic functions, required 16 chars in length.
/// An encrypted query string generated by a instance.
public SecureQueryString(string key, string queryString) : this(key)
{
Deserialize(DecryptAndVerify(queryString));
CheckExpiration();
}
///
/// Returns a encrypted query string.
///
///
public override string ToString()
{
return EncryptAndSign(Serialize());
}
private void Deserialize(string queryString)
{
string[] nameValuePairs = queryString.Split('&');
for (int i = 0; i <= nameValuePairs.Length - 1; i++) {
string[] nameValue = nameValuePairs(i).Split('=');
if (nameValue.Length == 2) {
base.Add(nameValue(0), nameValue(1));
}
}
if (base.GetValues(timeStampKey) != null) {
string[] strExpireTime = base.GetValues(timeStampKey);
m_expireTime = Convert.ToDateTime(strExpireTime(0));
}
}
private string Serialize()
{
StringBuilder sb = new StringBuilder();
foreach (string key in base.AllKeys) {
sb.Append(key);
sb.Append('=');
sb.Append(base.GetValues(key)(0).ToString());
sb.Append('&');
}
sb.Append(timeStampKey);
sb.Append('=');
sb.Append(m_expireTime.ToString(dateFormat));
return sb.ToString();
}
private string DecryptAndVerify(string input)
{
return mEncryptionUtil.Decrypt(input);
}
private string EncryptAndSign(string input)
{
return mEncryptionUtil.Encrypt(input);
}
private void CheckExpiration()
{
if (DateTime.Compare(m_expireTime, DateTime.Now) < 0) {
throw new ExpiredQueryStringException();
}
}
///
/// Gets or sets the timestamp in which this string should expire
///
public DateTime ExpireTime {
get { return m_expireTime; }
set { m_expireTime = value; }
}
}
}
Чтобы зашифровать какое-то значение и передать его другому действию в MVC, вы должны сделайте что-то вроде следующего.
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(FormCollection collection)
{
SecureQueryString qs = new SecureQueryString(mKey);
qs('YourName') = collection('name');
qs.ExpireTime = DateTime.Now.AddMinutes(2);
Response.Redirect('Home.aspx/About?data=' + HttpUtility.UrlEncode(qs.ToString()));
}
В действии, на которое мы выполняем перенаправление, вам понадобится то же самое ключ и само значение строки запроса для его расшифровки. Имейте в виду, что если у вас нет правильного ключа или вы пытаетесь расшифровать значение по истечении срока класс вызовет исключение.
public ActionResult About()
{
if (Request('data') != null) {
try {
SecureQueryString qs = new SecureQueryString(mKey, Request('data'));
ViewData('Message') = 'Your name is ' + qs('YourName');
}
catch (Exception ex) {
}
}
return View();
}
Я не тратил много времени на подробное объяснение источника, потому что он так давно я это не написал. Также имейте в виду, что это было задолго до мои первые дни испытаний ... (но похоже, что он работает)
Как всегда, исходный код для этого образца доступен для загрузки.
Есть разница между шифрованием и кодированием; эти методы не предназначались для шифрования.
Поскольку шифрование трудно сделать правильно и невероятно легко ошибиться (хотя оно все еще выглядит таким же «зашифрованным», как и правильное решение), я рекомендую вам вместо этого использовать идентификаторы GUID:
http://www.calemadr.com/.../ {6F0184E4-809F-4e30-8A5B-4DC144135A54}
SQL-сервер имеет уникальный тип идентификатора только для этого случая.
Хммм ... Это, вероятно, не будет иметь никакого значения, но вы можете попробовать библиотеку AntiXSS и ее метод URLEncode ().
http://www.codeplex.com/AntiXSS
HTH, Чарльз
Я удивлен, что UrlEncode не работает. Как выглядит результат вашего шифрования?
После того, как вы зашифруете свой Guid, попробуйте кодировать его в Base64 с помощью метода Convert.ToBase64String . Затем UrlEncode строку Base64, чтобы сделать ее приемлемой строкой для включения в ваш URL.
Не знаю, имеет ли это для вас какое-то значение, но я решил эту проблему самостоятельно. Мне пришлось удвоить urlencode.
Например
Server.UrlEncode (Server.UrlEncode (строка для кодирования))
Проблема, похоже, в том, что Request.Querystring (закодированная строка) автоматически выполняет декодирование, которое завинчивает до шифрования. Хотел бы я объяснить получше, но я все еще немного запутался